2016-06-29 13 views
0

ページングをサポートするために、1対Nの関係を持つ複数のテーブルを含むSQLクエリを作成しています。Postgresql join with limit

最初の10人の親を取得するには、私はすべての親は私が行うことができ、複数の子供

1つの選択肢は

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 
LEFT JOIN child c 
    ON c.parent_id = p.id 
LIMIT 10 

を実行しようとしました

これはかなり不器用です。私がしたいのは、

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

ですが、もちろん構文が間違っています。私はPostgreSQLが私がしたいことをサポートする何らかの方法を持っているのだろうかと思います。

答えて

2

使用common table expression

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

あなたは(から(親リミット10)のp ... '*から選択*'選択)CTE、簡単な派生テーブルは必要ありませんが、同じようにうまく動作します。 CTEが間違っているとは限りません。 –