过滤掉 MySQL SELECT 查询中的 NULL
问题:如何使用 MySQL SELECT 语句仅检索非空值?
标准 MySQL SELECT *
语句包括所有列,甚至包含具有 NULL
值的列。 要仅检索非空数据,请使用 IS NOT NULL
条件:
<code class="language-sql">SELECT * FROM your_table WHERE YourColumn IS NOT NULL;</code>
此查询返回 YourColumn
不包含 NULL
的行。 MySQL 还支持空安全相等运算符的否定,尽管这不是标准 SQL:
<code class="language-sql">SELECT * FROM your_table WHERE NOT (YourColumn <=> NULL);</code>
处理多个列需要不同的策略。一种方法使用多个 SELECT
语句和 UNION ALL
:
<code class="language-sql">SELECT val1 AS val FROM your_table WHERE val1 IS NOT NULL UNION ALL SELECT val2 FROM your_table WHERE val2 IS NOT NULL;</code>
这种方法单独检查每一列并组合结果。 然而,由于多次表扫描,它可能效率低下。
为了避免多次扫描,请考虑使用带有交叉连接的 CASE
语句:
<code class="language-sql">SELECT CASE idx WHEN 1 THEN val1 WHEN 2 THEN val2 END AS val FROM your_table CROSS JOIN (SELECT 1 AS idx UNION ALL SELECT 2) t HAVING val IS NOT NULL;</code>
这将从每行的 val1
和 val2
中选择第一个非空值,并将其分配给 val
列。
以上是如何从 MySQL SELECT 语句中排除 NULL 值?的详细内容。更多信息请关注PHP中文网其他相关文章!