过滤掉 MySQL SELECT 查询中的 NULL
问题:如何使用 MySQL SELECT 语句仅检索非空值?
标准 MySQL SELECT *
语句包括所有列,甚至包含具有 NULL
值的列。 要仅检索非空数据,请使用 IS NOT NULL
条件:
1 2 3 | <code class = "language-sql" >SELECT *
FROM your_table
WHERE YourColumn IS NOT NULL;</code>
|
登录后复制
此查询返回 YourColumn
不包含 NULL
的行。 MySQL 还支持空安全相等运算符的否定,尽管这不是标准 SQL:
1 2 3 | <code class = "language-sql" >SELECT *
FROM your_table
WHERE NOT (YourColumn <=> NULL);</code>
|
登录后复制
处理多个列需要不同的策略。一种方法使用多个 SELECT
语句和 UNION ALL
:
1 2 3 4 5 6 7 | <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
语句:
1 2 3 4 5 6 7 | <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中文网其他相关文章!