postgresql 如何使用IN()或ANY()将子查询的结果作为另一个子查询的输入

rdlzhqv9  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(2)|浏览(280)

如何使用一个查询获取不同ID的列表,然后将此列表作为参数提供给Postgres中的另一个查询。

(SELECT DISTINCT id FROM inventory WHERE supplier_id = 37) AS idlist  
(SELECT SUM(item_price) FROM transaction WHERE person_id IN (idlist)) AS output
ddhy6vgd

ddhy6vgd1#

您可以只使用SELECT DISTINCT ....查询作为第二个查询的IN()条件中的子查询。
即:

SELECT SUM(item_price) 
FROM transaction 
WHERE person_id 
IN 
(
    SELECT DISTINCT id 
    FROM inventory 
    WHERE supplier_id = 37
)

而且,在这种情况下,在该子查询中并不特别需要DISTINCT关键字

2w2cym1i

2w2cym1i2#

您可以使用IN和子查询,就像克雷格的答案一样

SELECT SUM(item_price) 
FROM transaction 
WHERE person_id IN (
      SELECT id 
      FROM inventory WHERE supplier_id = 37)

但是如果子查询的id列表非常大,最好使用EXISTS

SELECT SUM(item_price) 
FROM transaction t
WHERE EXISTS (
      SELECT 1 
      FROM inventory i WHERE supplier_id = 37 AND t.person_id = i.id)

相关问题