这是一个名为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”行)。
答案 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