如何选择包含空列或空列的任何行?
我正在尝试在我的桌子上运行检查,我希望在其中查看我的任何行是否包含不包含值的列。
示例表:演示
+----+------+------+
| ID | col1 | col2 |
+----+------+------+
| 1 | VAL1 | Val2 |
| 2 | NULL | Val2 |
| 3 | VAL1 | NULL |
+----+------+------+
我希望查询返回2-3行,注意我在实际表中有很多列,所以我不想将它包含在'where或'的查询中。
可以用mysql完成吗?
答案 0 :(得分:9)
select * from tablename where col1 is NULL or col2 is NULL
<强>结果强>
ID | col1 | col2
------------------
2 | NULL | Val2
3 | VAL1 | NULL
答案 1 :(得分:4)
如果你真的不想使用OR,你可以使用它:
SELECT *
FROM demo
WHERE concat(col1, col2, ...) is Null
或者这个:
SELECT *
FROM demo
WHERE col1+col2+... is null
虽然它使查询更容易编写,但它不会使它更快。我建议你只使用OR。
答案 2 :(得分:4)
不需要对列名进行硬编码的最佳答案是:
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)
答案 3 :(得分:-2)
SELECT
IFNULL(col1,0),
IFNULL(col2,0)
FROM mytable
WHERE col1 IS NULL or col2 IS NULL
您可以使用IFNULL设置默认值