left join-尝试标识子记录不存在的示例,或者如果子记录确实存在,则填充满足特定条件的唯一记录

b4qexyjb  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(308)

我试图在sql数据库中搜索子记录不存在的示例,或者如果子记录确实存在,则它们是特定类型(例如历史记录)而不存在其他类型(例如当前记录):

SELECT distinct parent.id FROM parenttable 
Left Join childtable On childtable.primarykey = parenttable.primarykey 
Where childtable.id is null

这将填充所有没有任何子记录但没有任何问题的父记录。但是,我还希望查询填充存在的唯一子记录是历史记录的示例(例如childtable.type='historical')。到目前为止我还没能做到这一点。

zz2j4svz

zz2j4svz1#

你可以用 not exists :

select p.id 
from parenttable p
where not exists (
    select 1
    from childtable c
    where c.primarykey = p.primarykey and c.type <> 'Historical'
)

这句话的意思是:从父表中获取所有没有子表的记录,这些子表的类型不是“historical”,没有子表的父表也满足这个条件。

ct2axkht

ct2axkht2#

请尝试此操作(在中使用运算符):

SELECT id FROM parenttab WHERE primarykey NOT IN
(SELECT primarykey FROM childtable WHERE type<>'Historical'
 OR type IS NULL)

它比为子查询中的每一行查找匹配项要快得多

相关问题