PostgreSQL-根据第一个子查询的结果运行第二个子查询

时间:2019-06-20 20:27:16

标签: sql postgresql

这是一个名为food的表:

id  food_name    source_id  date
1 | 'apple'     | null     | '2019-01-01'
2 | 'apple_cake'| null     | '2019-01-02' 
3 | 'apple'     | null     | '2019-01-05'
4 | 'pear'      | null     | '2019-01-06'   
5 | 'apple'     | null     | '2019-01-07' 
6 | 'apple_cake'| 4        | '2019-01-10'
7 | 'grape'     | null     | '2019-01-15' 

其中一些物品带有source_id,表示在清单上其他是其材料来源的产品。

因此,我正在尝试进行以下查询:首先,仅返回一行,如下所示:

query1

SELECT *
FROM food
WHERE date = '2019-01-01';

这将返回包含food_name apple 的行。

但是我想让查询运行第二个子查询,该子查询仅在上面的{em> em 和 apple 的情况下才执行上述 query1的行。此query2将专门查找 ,其apple_cake的food_name等于query1的source_id

query2

id

如何将它们组合成一个查询,仅当query1返回SELECT * FROM food WHERE food_name = 'apple_cake' AND source_id = query1.id; 苹果并且总是返回query1和query2的结果时才运行query2?

注意:永远不会重复food_name

注意2::当query1和query2合并时,它最多只能返回0行,1行或最多2行(如果返回的是'苹果”和连接的“ apple_cake”行)。

1 个答案:

答案 0 :(得分:0)

我想这就是你想要的:

SELECT *
FROM food a
JOIN food b ON a.id = b.source_id
WHERE a.date = '2019-01-01' 
AND a.food_name = 'apple' 
AND b.food_name 'apple_cake