MySQL - 选择具有空列的行

Posted

技术标签:

【中文标题】MySQL - 选择具有空列的行【英文标题】:MySQL - Selecting rows with null columns 【发布时间】:2013-01-01 16:45:57 【问题描述】:

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

我正在尝试对我的表进行检查,我想查看我的任何行是否包含不包含值的列..

示例表:演示

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

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

mysql能做到吗?

【问题讨论】:

要避开第一条记录,取其他记录吗? 我想获取所有包含空列的行,即使我不知道列名:) ***.com/a/20161429/1031945 【参考方案1】:
select * from tablename where col1 is NULL or col2 is NULL

结果

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

【讨论】:

【参考方案2】:

不需要对列名进行硬编码的最佳答案是:

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】:

如果你真的不想使用 OR,你可以使用这个:

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

或者这个:

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

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

【讨论】:

【参考方案4】:
SELECT 
    IFNULL(col1,0),
    IFNULL(col2,0)
FROM mytable
WHERE col1 IS NULL or col2 IS NULL

您可以使用 IFNULL 设置默认值

【讨论】:

我相信,当您想将空列填充为零时使用它:/ 但是,OP只需要显示相关信息,其列包含NULL值,但是,努力。 :)

以上是关于MySQL - 选择具有空列的行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL选择其他表中没有匹配列的行

C# datatable 去掉为空列的行

从包含一些空列的 Informix 表中选择所有行

选择 PL/SQL 中两个非空列值之间的行集

SQL - 如何选择具有最大值列的行

使用 DB2,您如何为一列选择具有 MAX 的行,然后在同一张表的另一列的结果子集中选择具有 MAX 的行?