我有两张表在pmid
上有一对多关联。因此,如果一个表具有pmid
,则第二个表应具有多个具有相同pmid的行。然而,有些东西横着走了,我在第二张桌子里错过了我最新一批的pmids。这些查询应该有助于说明问题,但我无法弄清楚如何从第一个表中获取第二个表中实际丢失的ID。
select count(*) from abstract_mesh am; #2167101
select count(*) from abstract_mesh am
join abstracts a on am.pmid = a.pmid; #2133848
select 2167101 - 2133848; #33253
select count(*) from abstract_mesh where pmid is NULL; #33253
因此,您可以看到abstract_mesh中有33,253行没有pmids。我只是想从摘要表中找出我应该感兴趣的哪些内容。
答案 0 :(得分:1)
您可以使用NOT EXITS
过滤掉记录,例如
select *
from table1 t1
where not exists
select * from table2 t2 where t1.pmid = t2.pmid;
答案 1 :(得分:0)
你需要和反加入。 SQL缺少显式的反连接运算符。 mySQL的标准SQL有EXCEPT
(关系minus
)缺少这个。在这里,我使用NOT IN <table expression>
来模拟反连接(尽管不是100%确定我的表格是正确的):
SELECT DISTINCT pmid
FROM abstract_mesh
WHERE pmid NOT IN ( SELECT pmid FROM abstracts );