【问题标题】:Query to find all records in A that has no join records in B for specific criteria查询以查找 A 中所有在 B 中没有特定条件的连接记录的记录
【发布时间】:2018-12-20 21:09:09
【问题描述】:

我正在尝试构造一个查询来查找 PostgreSQL 表 (a) 中的所有记录:

  • b 中没有记录根本state='ready'

b中没有记录的原因与状态state='ready'无关(可以是没有关联,关联为空,状态不同或状态为空)

在下面的示例中,我希望在表 a 中找到 ID 为:2,3,4 的记录。

我尝试了左连接,但我无法让它工作。

PS。查询必须是高性能的,因为表有数百万条记录。

https://www.db-fiddle.com/f/5thdgDkv5B6Mx56NyHfoiz/0

【问题讨论】:

  • 您应该在问题中提供样本数据和期望的结果。外部站点可用于扩充问题,但不应要求它们理解问题。这些表是如何相关的?

标签: sql postgresql


【解决方案1】:

大概,你只是想要not exists

select a.*
from a
where not exists (select 1
                  from b
                  where b.? = a.? and  -- whatever the join conditions are
                        b.state = 'ready'
                 );

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT * FROM a WHERE id NOT IN 
    (SELECT b.a_id FROM b WHERE b.state = 'ready');
    

    https://www.db-fiddle.com/f/5thdgDkv5B6Mx56NyHfoiz/2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多