MySQL - 选择具有空列的行

8

如何选择包含空列或null列的任何行?

我正在尝试对我的表格进行检查,以查看是否有任何行包含不保存值的列。

示例表格:演示

+----+------+------+
| ID | col1 | col2 |
+----+------+------+
| 1  | VAL1 | Val2 |
| 2  | NULL | Val2 |
| 3  | VAL1 | NULL |
+----+------+------+

我希望查询返回第2-3行,注意实际表中有许多列,因此不想在查询中使用“where or”包含它。

MySQL可以做到吗?


你想跳过第一条记录并获取其他记录吗? - Muhammad Raheel
我想获取所有包含空列的行,即使我不知道列的名称 :) - Zalaboza
https://dev59.com/MnA65IYBdhLWcg3w-jym#20161429 - Aniket Kulkarni
4个回答

9
select * from tablename where col1 is NULL or col2 is NULL

结果

 ID | col1  | col2
 ------------------     
 2  | NULL  | Val2     
 3  | VAL1  | NULL

5
最好的答案是不需要硬编码列名的:
DECLARE @sqlStr VARCHAR(max) = (
        SELECT stuff((
                    SELECT 'and ' + c.NAME + ' is null '
                    FROM sys.columns c
                    WHERE object_name(object_id) = 'yourtablename'
                    ORDER BY c.NAME
                    FOR XML PATH('')
                    ), 1, 3, '')
        )

SET @sqlStr = 'select * from ' + yourtablename + ' where ' + @sqlStr

PRINT @sqlStr

EXEC (@sqlStr)

2
为下一代 :) - FLICKER

5

如果您真的不想使用OR操作符,可以尝试使用以下方法:

SELECT *
FROM demo
WHERE concat(col1, col2, ...) is Null

或者这个:
SELECT *
FROM demo
WHERE col1+col2+... is null

虽然使用它可以使查询更容易编写,但并不会使查询速度更快。我建议您只使用OR。


如果有一列为NULL,这将返回NULL。如果您想检查列表中的所有列是否为空,请使用CONCAT_WS("", col1, col2, ...) - tomvo

-2
SELECT 
    IFNULL(col1,0),
    IFNULL(col2,0)
FROM mytable
WHERE col1 IS NULL or col2 IS NULL

你可以使用IFNULL函数来设置默认值


我相信,当您想将空列填充为零时,可以使用这个:/ - Ravi
但是,OP只需要展示相关信息,其中列保持空值,尽管很努力。 :) - Ravi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接