获取没有 children 的 parents 行
Get rows of parents without children
我有这个table:
UID
CHILD_UID
a
{}
b
{}
c
{a}
UID
是 VARCHAR
,CHILD_UID
是 VARCHAR[]
。我需要一个 returns b,c 的查询。我的意思是没有 children 的 parent 列表,检查 uid
不在任何 child_uid
行中。
- a 不是 parent,是 c.child 的
- b 是一个 parent.
- c 是一个 parent.
我已经试过了,但没有结果:
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.
我有这个table:
UID | CHILD_UID |
---|---|
a | {} |
b | {} |
c | {a} |
UID
是 VARCHAR
,CHILD_UID
是 VARCHAR[]
。我需要一个 returns b,c 的查询。我的意思是没有 children 的 parent 列表,检查 uid
不在任何 child_uid
行中。
- a 不是 parent,是 c.child 的
- b 是一个 parent.
- c 是一个 parent.
我已经试过了,但没有结果:
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.