我正在尝试使用PostgreSQL的Array
类型实现多对多关系,因为它比我的用例更好地扩展到连接表。我有两个表:table1
和table2
。 table1
是关系中的父级,具有列child_ids bigint[] default array[]::bigint[]
。 table1
中的单行可以在table2
列中有超过数万个对table1.child_ids
的引用,因此我想尝试将查询返回的数量限制为最大值10.我将如何构建此查询?
我要取消引用子ID的查询是SELECT *, json_agg(table2.*) as children FROM table1 INNER JOIN table2 ON table2 = ANY(table1.child_ids)
。我没有看到一种方法可以在不限制整个响应的情况下设置限制。有没有办法限制此INNER JOIN,或者至少使用子查询,我可以使用LIMIT
来限制table2
的结果数量?
答案 0 :(得分:1)
对于正确规范化的表,这本来就很简单,但这里有数组:
SELECT *
FROM table1 t1, LATERAL (
SELECT json_agg(*) AS children
FROM table2
WHERE id = ANY (t1.child_ids)
LIMIT 10) t2;
当然,您不会影响每id
table2
{10}行选择哪一行。