SQL - 选择所有不匹配空行的行

Posted

技术标签:

【中文标题】SQL - 选择所有不匹配空行的行【英文标题】:SQL - Selecting all rows with non matching null rows 【发布时间】:2020-10-17 21:53:51 【问题描述】:

如何选择所有具有不匹配空行的行?鉴于下表,不应返回任何具有外键 1 的行,因为存在具有 NULL 的相应行。如何只选择具有外键 2 和 3 的行?

foreign_key | created_at
1             12345...
1             12345...
2             12345...
3             12345...
1             NULL

【问题讨论】:

你试过SELECT * FROM TableName WHERE created_at IS NOT NULL吗? 【参考方案1】:

你可以使用not exists:

select *
from mytable t
where not exists (
    select 1 
    from mytable t1 
    where t1.foreign_key = t.foreign_key and t1.created_at is null
)

另一种选择是使用窗口函数;这是使用布尔窗口的一种方法:

select *
from (
    select t.*, bool_or(created_at is null) over(partition by foreignkey) has_null
    from mytable t
) t
where not has_null

【讨论】:

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

如何在 Oracle SQL 中查找最具体的匹配行

避免在 PL/SQL 命令行上的选择结果之间出现空行

SQL - 选择具有最匹配列的行

选择同一表 SQL 中两列之间存在一对一匹配的行

计算文件中的空白行数

SQL Server:选择列中多次出现正则表达式匹配的行