【问题标题】:SQL - Selecting column that contains at least one NULL value?SQL - 选择包含至少一个 NULL 值的列?
【发布时间】:2020-04-05 04:30:59
【问题描述】:

我如何过滤输出的位置,该输出过滤具有至少一个空值的特定列?

所以对于前。状态列中至少有一个 NULL 值的用户?

ID    |         Status
B        2017-10-03 08:00:00
B                NULL
G        2017-10-03 08:00:00
G        2017-10-03 08:00:00
G        2017-10-03 08:00:00
B        2017-10-03 08:00:00
D        2017-10-03 08:00:00
D                NULL
D                NULL

【问题讨论】:

    标签: mysql sql null presto


    【解决方案1】:

    你可以使用聚合:

    select id
    from t
    group by id
    having count(*) <> count(status);
    

    如果想要原始行,可以使用exists:

    select t.*
    from t
    where exists (select 1
                  from t t2
                  where t2.id = t.id and t2.status is null
                 );
    

    【讨论】:

    • 谢谢,原始行是什么意思?两个查询不会给我 ID 列吗?还是您的意思是所有行,而不仅仅是按 ID 列分组? @戈登林诺夫
    • @Chris90 。 . .第一个查询给出了满足条件的ids。第二个给出id 满足条件的每一行。
    【解决方案2】:

    我认为这是最简单最快的方法。

    select id
    from t
    where status is null
    group by id;
    

    【讨论】:

    • 但我不希望所有 id 都为 null,只希望那些至少有 1 个 null 而不是全部为 null 的 id
    • 嗯,这正是你会得到的。如果给定 id 的 status 列中至少有一个空值,它将在过滤器中。如果您为用户 ID 填写了所有状态,则不会返回
    【解决方案3】:

    查询:

    select id
    from tablename
    where status is null
    

    返回包含至少 1 个 statusnull 的所有 ids。
    所以像这样使用它:

    select * from tablename
    where id in (select id from tablename where status is null) 
    

    如果你只想要ids:

    select id
    from tablename
    group by id
    having sum(status is null) > 0
    

    【讨论】:

      猜你喜欢
      • 2021-10-05
      • 1970-01-01
      • 2022-01-27
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多