[英]MYSQL find all rows where second row have given values
我的数据库表如下所示:
╔════╦═══════════╦═══════════╗
║ 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
希望你理解我的问题。 谢谢!
如果只有两个搜索值,则可以使用内部联接
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';
这可以轻松扩展到更多成分:
SELECT recipe_id
FROM theTable
WHERE name IN ('Apple', 'Orange')
GROUP BY recipe_id
HAVING COUNT(*) = 2 /* number of ingredients in the list */
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之前您的配料数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.