为什么不存在返回存在的id ?



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]*$';

相关内容

  • 没有找到相关文章

最新更新