2013-01-01 67 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。