my query:
select a.id, a.affiliation
FROM public.affiliation AS a
WHERE NOT EXISTS (
SELECT *
FROM ncbi.affi_known1 AS b
WHERE a.id = b.id
)
limit 5000
它返回:
id | 归属 |
---|---|
4683763 | 英国BS1 3NY布里斯托尔惠特森街布里斯托尔大学多萝西霍奇金大楼精神药理学组 |
您对EXISTS
如何工作的理解可能会中断。您当前存在的查询是说id4683763
存在于affiliation
表中,而不是affi_known1
表。因此,下面的查询应该返回单个记录:
SELECT a.id, a.affiliation
FROM public.affiliation a
WHERE a.id = 4683763;
我假设需求是仅在id不存在于第二个表中时获取行,因此您可以尝试这个
select a.id, a.affiliation
FROM public.affiliation AS a
WHERE a.id NOT IN (
SELECT id
FROM ncbi.affi_known1
)
如果id
是一个整数,您的查询将执行您想要的操作。
如果id
是字符串,您可能会遇到"看起来像"的问题。很难说出问题是什么——id
中可能有空格、隐藏字符或其他东西。这可以在任意一个表中
假设id看起来像数字,您可以过滤"bad"使用正则表达式标识:
select id
from ncbi.affi_known1
where not id ~ '^[0-9]*$';