2013-01-01 68 views
4

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

我试图跑在我的表检查,其中我想看看我的任何行包含不包含值的列..

示例表:演示

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

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

可以用mysql来完成吗?

+0

你想避免的第一条记录,并获取其他记录? –

+0

我想获取包含空列的所有行,即使我不知道列名称:) – Zalaboza

+0

http://stackoverflow.com/a/20161429/1031945 –

回答

3

不需要硬编码的列名的最好的答案是:

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) 
+0

3年后:),谢谢你为下一代回答 – Zalaboza

+2

:) – FLICKER

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

结果

ID | col1 | col2 
------------------  
2 | NULL | Val2  
3 | VAL1 | NULL 
-2
SELECT 
    IFNULL(col1,0), 
    IFNULL(col2,0) 
FROM mytable 
WHERE col1 IS NULL or col2 IS NULL 

您可以使用IFNULL设置默认值

+0

我相信,这是使用,当你想填充空列为零:/ – Ravi

+0

是的,当然我的意思是同样的东西 –

+0

但是,OP只需要显示相关信息,其列保留NULL值,但是,很好的努力。 :) – Ravi

4

如果你真的想不使用OR值,你可以这样做:

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

或者这个:

SELECT * 
FROM demo 
WHERE col1+col2+... is null 

但虽然它使查询更容易写,它不会让它更快。我建议你只是使用OR。