SQL:在一个联接上进行筛选,而在另一个联接上进行排序

SQL:在一个联接上进行筛选,而在另一个联接上进行排序,sql,postgresql,join,Sql,Postgresql,Join,我有一个产品模型,它有许多Skus,每个产品还可以有一个定制,其中包括特色产品。架构如下所示: Product | id | category_id | title | image | Sku | id | product_id | subtitle | price | Customization | id | product_id | title | featured | 我正在根据其类别id和Sku的价格对产品进行筛选/排序,如下所示: SELECT id, title, image,

我有一个
产品
模型,它有许多
Sku
s,每个产品还可以有一个
定制
,其中包括特色产品。架构如下所示:

Product
| id | category_id | title | image |

Sku
| id | product_id | subtitle | price |

Customization
| id | product_id | title | featured |
我正在根据其类别id和
Sku
的价格对
产品进行筛选/排序,如下所示:

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;
我想为
产品
s添加一个附加过滤器,该产品的
定制
s具有
featured=true


是否可以包含另一个
JOIN
来执行此操作,或者是否有更好的方法?

首先,您不需要子查询。其次,您可以使用
加入
(或
中的
存在
):


谢谢,这非常有效,也改进了我原来的查询!
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