2015-11-02 31 views
0

我有了許多SkuProduct模型,並且每個產品還可以具有包括被一個特色Customization。模式是這樣的:SQL:在一個過濾JOIN而排序上的另一

Product 
| id | category_id | title | image | 

Sku 
| id | product_id | subtitle | price | 

Customization 
| id | product_id | title | featured | 

我過濾/基於其CATEGORY_ID及其Sku S的像這樣的價格排序Product

SELECT id, title, image, prices 
    FROM (
    SELECT p.id, p.title, p.image, array_agg(s.price) as prices 
    FROM "Products" p 
    JOIN "Skus" s 
    ON p.id = s.product_id 
    WHERE p.category_id in (1,2,3,4) AND s.price > 99 
    GROUP BY p.id 
) x 
ORDER BY id DESC; 

我想添加額外的過濾器對於Product s,其Customization s有featured = true

是否可以包含另一個JOIN來做到這一點,還是有更好的方法?

回答

2

首先,你不需要子查詢。

SELECT p.id, p.title, p.image, array_agg(s.price) as prices 
FROM "Products" p JOIN 
    "Skus" s 
     ON p.id = s.product_id JOIN 
     Customization c 
     ON p.id = c.product_id AND c.featured = true 
WHERE p.category_id in (1, 2, 3, 4) AND s.price > 99 
GROUP BY p.id 
ORDER BY p.id DESC 
+0

謝謝,這個偉大工程,提高了我原來的查詢,以及:第二,你可以用一個JOIN(或INEXISTS)做到這一點! – tyler

相關問題