2016-03-07 83 views
0

我試圖使用PostgreSQL的Array類型實現多對多的關係,因爲它比連接表更適合我的用例。我有兩個表格:table1table2table1是關係中的父母,具有child_ids bigint[] default array[]::bigint[]列。在table1單行可以在table1.child_idstable2引用數以萬計的向上,所以我想嘗試來限制我的查詢返回到最高10我將如何構建這個查詢量?PostgreSQL 9.4.5:限制內部連接的結果數

我的引用孩子ID的查詢是SELECT *, json_agg(table2.*) as children FROM table1 INNER JOIN table2 ON table2 = ANY(table1.child_ids)。我不認爲有一種方法可以在不限制整個響應的情況下設置限制。有沒有辦法要麼限制此INNER JOIN,或至少使用子查詢,我可以使用LIMITtable2限制結果的數量?

回答

1

這早就已經死了簡單的與正確規範化的表,但在這裏使用數組雲:當然

SELECT * 
FROM table1 t1, LATERAL (
    SELECT json_agg(*) AS children 
    FROM table2 
    WHERE id = ANY (t1.child_ids) 
    LIMIT 10) t2; 

,你有沒有影響,在其每table2id 10行會被選中。

+0

謝謝你,這完美地工作! – terpak

+0

你碰巧知道是否有方法在knex中使用LATERAL? – terpak

+0

我不知道knex所以我不能幫你在這裏。也許一個新的問題? – Patrick