PostgreSQL 9.4.5:限制 INNER JOIN 的结果数
PostgreSQL 9.4.5: Limit number of results on INNER JOIN
我正在尝试使用 PostgreSQL 的 Array
类型实现多对多关系,因为它比连接 table 更适合我的用例。我有两个 table:table1
和 table2
。 table1
是关系中的父级,具有列 child_ids bigint[] default array[]::bigint[]
。 table1
中的一行在 table1.child_ids
列中可以有数万个对 table2
的引用,因此我想尝试将查询返回的数量限制为最大10. 我将如何构造此查询?
我取消引用子 ID 的查询是 SELECT *, json_agg(table2.*) as children FROM table1 INNER JOIN table2 ON table2 = ANY(table1.child_ids)
。我看不出有什么方法可以在不限制整个响应的情况下设置限制。有没有办法限制这个 INNER JOIN,或者至少利用一个子查询,我可以使用 LIMIT
来限制来自 table2
的结果数量?
如果使用正确规范化的表,这将非常简单,但这里使用数组:
SELECT *
FROM table1 t1, LATERAL (
SELECT json_agg(*) AS children
FROM table2
WHERE id = ANY (t1.child_ids)
LIMIT 10) t2;
当然,您无法影响选择 table2
中每个 id
的哪 10 行。
我正在尝试使用 PostgreSQL 的 Array
类型实现多对多关系,因为它比连接 table 更适合我的用例。我有两个 table:table1
和 table2
。 table1
是关系中的父级,具有列 child_ids bigint[] default array[]::bigint[]
。 table1
中的一行在 table1.child_ids
列中可以有数万个对 table2
的引用,因此我想尝试将查询返回的数量限制为最大10. 我将如何构造此查询?
我取消引用子 ID 的查询是 SELECT *, json_agg(table2.*) as children FROM table1 INNER JOIN table2 ON table2 = ANY(table1.child_ids)
。我看不出有什么方法可以在不限制整个响应的情况下设置限制。有没有办法限制这个 INNER JOIN,或者至少利用一个子查询,我可以使用 LIMIT
来限制来自 table2
的结果数量?
如果使用正确规范化的表,这将非常简单,但这里使用数组:
SELECT *
FROM table1 t1, LATERAL (
SELECT json_agg(*) AS children
FROM table2
WHERE id = ANY (t1.child_ids)
LIMIT 10) t2;
当然,您无法影响选择 table2
中每个 id
的哪 10 行。