我有一个食谱数据库,其中包含午餐,晚餐,甜点,无糖等类别,并且我想返回例如无糖和甜点的食谱。
我的表的图像,因为SO不能很好地处理表
Recipes |---------------------|------------------| | id | name | |---------------------|------------------| | 12 | cookies | |---------------------|------------------| | 15 | spaghetti | |---------------------|------------------| | 22 | sugar-free tarts | |---------------------|------------------|
Categories |---------------------|------------------| | id | name | |---------------------|------------------| | 1 | dinner | |---------------------|------------------| | 2 | dessert | |---------------------|------------------| | 3 | sugar free | |---------------------|------------------|
Recipe Categories
id | recipe_id | category_id |
--------------------- | ------------------ | --------------------- |
1 | 12 | 2 |
--------------------- | ------------------ | --------------------- |
2 | 15 | 1 |
--------------------- | ------------------ | --------------------- |
3 | 15 | 3 |
--------------------- | ------------------ | --------------------- |
4 | 22 | 2 |
--------------------- | ------------------ | --------------------- |
5 | 22 | 3 |
--------------------- | ------------------ | --------------------- |
我尝试使用此查询,但是我得到的只是甜点或无糖配方(如果使用示例图像数据,则返回意大利面)
SELECT r.* FROM recipes r JOIN recipe_categories rc ON r.id = rc.recipe_id WHERE rc.category_id ='2' OR rc.category_id ='3' GROUP BY recipe_id HAVING COUNT(rc.id)>=2 ORDER BY r.created_on DESC 问题演示:https : //www.db-fiddle.com/f/22WF9LtaUKjzzU6d9S4ALH/3
问题来源于stack overflow
这样可以:
SELECT r.id, r.name FROM recipes r JOIN recipe_categories rc ON r.id = rc.recipe_id WHERE rc.recipe_category_name_id ='2' OR rc.recipe_category_name_id ='3' GROUP BY r.id, r.name HAVING COUNT(DISTINCT rc.recipe_category_name_id) = 2 参见演示。 结果:
id | name |
---|---|
22 | sugar-free tarts |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。