MYSQL查找第二行给定值的所有行

时间:2016-08-04 19:02:43

标签: mysql sql database

我的数据库表如下:

╔════╦═══════════╦═══════════╗
║ ID ║ RECIPE_ID ║   NAME    ║
╠════╬═══════════╬═══════════╣
║  1 ║        1  ║ Apple     ║
║  2 ║        2  ║ Apple     ║
║  3 ║        2  ║ Orange    ║
║  4 ║        3  ║ Kiwi      ║
║  5 ║        1  ║ Kiwi      ║
║  6 ║        3  ║ Cherry    ║
║  7 ║        3  ║ Banana    ║
╚════╩═══════════╩═══════════╝

当我查询mysql的"Apple""Orange"时,我应该得到RECIPE_ID 2,因为"Apple""Orange"具有相同的RECIPE_ID 或者第二个例子:

在寻找"Kiwi""Banana"时,我应该获得RECIPE_ID 3

这是我尝试过的SQL

SELECT recipe_id, name 
FROM foodtipps.rezepte_zutaten 
WHERE name='Kiwi' AS 'NAME1' AND 
name='Banana AS 'NAME2' GROUP BY recipe_id

希望你理解我的问题。 谢谢!

3 个答案:

答案 0 :(得分:2)

如果您只有两个搜索值,则可以使用内部联接

select a.recipe_id 
from my_table as a
inner join my_table as b on  a.recipe_id = b.recipe_id
where a.name ='Apple' 
and b.name ='Orange';

答案 1 :(得分:2)

这可以很容易地扩展到更多的成分:

SELECT recipe_id
FROM theTable
WHERE name IN ('Apple', 'Orange')
GROUP BY recipe_id
HAVING COUNT(*) = 2 /* number of ingredients in the list */

答案 2 :(得分:1)

scaisEdge 给出的答案解决了您提出的问题

可以扩展它以支持无限数量的成分,但每次添加一个联接到桌子时有点乱,因此......

 SELECT recipe_id, COUNT(DISTINCT name)
 FROM recipe
 WHERE name in (
     'Apple',
     'Orange',
      ...
 )
 GROUP BY recipe_id
 ORDER BY 1 DESC;

您还可以添加HAVING COUNT(DISTINCT name)=xxx,其中xxx是您在ORDER BY之前的成分数。