postgresql 选择数据库中不存在但存在于给定postgres数组中的元素

bvjveswy  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(114)

我想选择数据库中不存在的元素,但存在于postgres数组中。要可视化:


的数据
假设我的表中有这样的数据:



经过一些研究,我已经接近了,但我没有得到我所期望的。我目前的查询是:

WITH res AS (SELECT entity_number FROM entity_coordinates WHERE entity_number IN (
    'MG1735401016/6',
  'NON-EXIST-1',
  'P171025002876-1',
  'P170321400780-1',
  'NON-EXIST-2'
))

SELECT *
FROM unnest(ARRAY[
    'MG1735401016/6',
  'NON-EXIST-1',
  'P171025002876-1',
  'P170321400780-1',
  'NON-EXIST-2'
]) item_id
FULL OUTER JOIN res ON entity_number=item_id

字符串
我的预期结果是:



我尝试了不同的加入类型,但没有运气。
任何帮助都很感激

1wnzp6jl

1wnzp6jl1#

所以,这个查询应该可以在没有任何JOIN s的情况下实现你想要做的事情(NOT EXISTS是检查是否有任何entity_number对应于str(数组元素)的最直接的方法):

SELECT str
FROM unnest(ARRAY[
          'MG1735401016/6',
          'NON-EXIST-1',
          'P171025002876-1',
          'P170321400780-1',
          'NON-EXIST-2'
        ]) AS str
WHERE NOT EXISTS (
    SELECT 1
    FROM entity_coordinates
    WHERE entity_number = str
);

字符串

fcg9iug3

fcg9iug32#

经过一番研究,我发现了另一个使用EXCEPT的解决方案:

SELECT *
FROM unnest(ARRAY[
    'MG1735401016/6',
  'NON-EXIST-1',
  'P171025002876-1',
  'P170321400780-1',
  'NON-EXIST-2'
]) AS t(id)

EXCEPT 

SELECT entity_number FROM entity_coordinates

字符串
但我的基准测试显示,@nafrolov的解决方案快了近一倍,所以我接受了他的答案

相关问题