MySQL - 选择具有空列的行

Zal*_*oza 6 mysql sql select isnull

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

我正在尝试在我的桌子上运行检查,我想在其中查看我的任何行是否包含不包含值的列.

示例表:demo

+----+------+------+
| ID | col1 | col2 |
+----+------+------+
| 1  | VAL1 | Val2 |
| 2  | NULL | Val2 |
| 3  | VAL1 | NULL |
+----+------+------+
Run Code Online (Sandbox Code Playgroud)

我希望查询返回2-3行,注意我在实际表中有很多列,所以我不想在'where或'的查询中包含它.

可以用mysql完成吗?

Rav*_*avi 10

select * from tablename where col1 is NULL or col2 is NULL
Run Code Online (Sandbox Code Playgroud)

结果

 ID | col1  | col2
 ------------------     
 2  | NULL  | Val2     
 3  | VAL1  | NULL
Run Code Online (Sandbox Code Playgroud)


fth*_*lla 5

如果您真的不想使用OR,可以使用以下命令:

SELECT *
FROM demo
WHERE concat(col1, col2, ...) is Null
Run Code Online (Sandbox Code Playgroud)

或这个:

SELECT *
FROM demo
WHERE col1+col2+... is null
Run Code Online (Sandbox Code Playgroud)

但是虽然它使查询更易于编写,但并不能使其更快。我建议您只使用OR。


FLI*_*KER 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)
Run Code Online (Sandbox Code Playgroud)

  • 为下一代:) (2认同)