PostgreSQL 9.4.5:限制INNER JOIN的结果数量

时间:2016-03-07 17:55:24

标签: postgresql join many-to-many

我正在尝试使用PostgreSQL的Array类型实现多对多关系,因为它比我的用例更好地扩展到连接表。我有两个表:table1table2table1是关系中的父级,具有列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的结果数量?

1 个答案:

答案 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}行选择哪一行。