【发布时间】:2018-06-23 03:12:07
【问题描述】:
我有一张桌子:
id integer
status_id integer
children integer[]
如何编写查询以在子项上将表连接到自身并查找所有记录(所有子项的 status_id 为 2)且该项的状态为 1?
此外还应为子项编制索引以及使用什么索引?
编辑:根据 krokodilko 的回答,我认为查询可能是:
SELECT id
FROM (
SELECT p.id, p.status_id, every(c.status_id = 2) AS all_children_status_2
FROM positions p
JOIN positions c
ON c.id = ANY (p.children)
GROUP BY p.id, p.status_id
) sub
WHERE all_children_status_2 IS TRUE AND status_id = 1;
编辑 2: 请注意,我在阅读中发现数组列应该使用 GIN 或 GIST 索引。然而不幸的是,postgres 在使用 ANY 时不使用这些索引。这意味着虽然上述查询有效,但速度非常慢。
【问题讨论】:
标签: sql arrays postgresql join