获取没有 children 的 parents 行

Get rows of parents without children

我有这个table:

UID CHILD_UID
a {}
b {}
c {a}

UIDVARCHARCHILD_UIDVARCHAR[]。我需要一个 returns b,c 的查询。我的意思是没有 children 的 parent 列表,检查 uid 不在任何 child_uid 行中。

我已经试过了,但没有结果:

SELECT * 
FROM table 
WHERE NOT uid = ANY(SELECT child_uid FROM table);

换句话说,获取其uid不在child_uid列的项目。

child_uid 是一个数组,因此应该将其转换为子列表(使用 UNNEST

SELECT * FROM table 
   WHERE NOT uid = ANY(SELECT unnest(child_uid) FROM table);

您可以使用 LEFT SELF JOIN 检查是否找不到父项作为子项:

SELECT parents.UID
FROM       tab parents
LEFT JOIN tab children
       ON parents.UID = ANY(children.CHILD_UID)
WHERE children.UID IS NULL

试试看 here.