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

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

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

示例表:演示

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

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

用mysql能做到吗?

【问题讨论】:

标签: mysql sql select isnull


【解决方案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值,但是,努力。 :)
      猜你喜欢
      • 1970-01-01
      • 2011-04-01
      • 2019-09-30
      • 2012-12-06
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多