PostgreSQL带有限制的连接

17

我正在创建涉及多个表格以支持分页的1到N关系的SQL查询。

为了获取前10个父级,我尝试执行以下操作:

SELECT * from parent p
LEFT JOIN child c
ON c.parent_id = p.id
LIMIT 10

如果任何父级有超过一个子级,则此方法无法正常工作。

我可以尝试的一种替代方法是

SELECT * from parent LIMIT 10 into temp_p;
SELECT * from temp_p p
LEFT JOIN child c
ON c.parent_id = p.id

这样说有些笨拙。我想做的是

SELECT * from parent p LIMIT 10
LEFT JOIN child c
ON c.parent_id = p.id

但是语法显然是错误的。我在想PostgreSQL是否有某种方法来支持我想做的事情。

1个回答

24

使用通用表达式

WITH ten_parents AS (
  SELECT * from parent LIMIT 10)
SELECT *
  FROM ten_parents p
    LEFT JOIN child c
      ON c.parent_id = p.id

8
不需要使用CTE,一个简单的派生表(select * from (select * from parent limit 10) p ...)同样有效。当然,并不是说CTE是错误的。 - mu is too short

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接