【问题标题】:Find IDS not present in table查找表中不存在的 IDS
【发布时间】:2020-04-20 08:41:56
【问题描述】:

我有一堆 md5 id

6c26e28dc6484f0e998fd18b883de4c6
2bf4d0d85709c75adba13ba48011d62c
a67a5bcf329d58d2c23ed422214f66b3
...

其中一些出现在表格中,其中一些是新的。如何找到表中不存在的这些 id 如果我这样做了

select id from items where id not iN (...) 

然后它会排除所有 id

如果我这样做

select id from items where id IN (...)

它只给出存在的 ID,我必须以编程方式找到不存在的 ID 如何直接获取不存在的IDS

数据库:postgresql

【问题讨论】:

  • where not IN 将返回表中不在此数组中的每个id,我只想要数组中不在表中的一堆id
  • 您在下面有一个答案。将这些 id 放入自己的表中。

标签: sql postgresql where-in


【解决方案1】:

您可以使用VALUES 子句,这是一个标准并且在大多数 RDBMS 中都可用:

SELECT src.id
FROM (VALUES
    ('6c26e28dc6484f0e998fd18b883de4c6'),
    ('2bf4d0d85709c75adba13ba48011d62c'),
    ('a67a5bcf329d58d2c23ed422214f66b3')
) AS src(id)
WHERE NOT EXISTS (
    SELECT 1
    FROM items 
    WHERE items.id = src.id
)

【讨论】:

    【解决方案2】:

    你想加入那些不存在于物品中的东西。 我会将 md5 变成一个带有 unnest 和 string_to_array 的表

    select * from
    ( select
    unnest(string_to_array('6c26e28dc6484f0e998fd18b883de4c6,
    2bf4d0d85709c75adba13ba48011d62c,
    a67a5bcf329d58d2c23ed422214f66b3', ','))as md5
    )  a
    where not exists(select 1 from items i where id = md5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 2014-09-09
      相关资源
      最近更新 更多