我的数据库表如下:
╔════╦═══════════╦═══════════╗
║ 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
希望你理解我的问题。 谢谢!
答案 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之前的成分数。