mysql - SQL / MYSQL 如果一个或多个匹配则弹出整个集合
问题描述
如果设置了一个或多个值匹配,我如何弹出整个表 1 id?
按照示例:
表 1 称为“产品”,表 2 称为“过敏原”。
每个表都有多对多的关系(许多产品可以有许多过敏原)。
我提出以下要求:
SELECT
p.id,
p.name,
group_concat(a.allergen_id) as allergens
FROM local_product p
LEFT JOIN local_product_allergen a ON (a.`local_product_id` = p.id AND a.allergen_id NOT IN (1,2))
WHERE
p.name like 'milk%'
LIMIT 0,10
返回的结果是:
ID | Name | Allergens
1 | Milk | 3
2 | Soy Milk | 4
如果我删除条件“a.allergen_id NOT IN (1,2)”,它会返回:
1 | Milk | 1,2,3
2 | Soy Milk | 4
如果一个或多个值与过敏原行匹配以获得该结果,我想弹出结果“牛奶”@ID = 1:
2 | Soy Milk | 4
感谢可以帮助我的人,显然这是一个简化的请求,因为原始请求要长得多,并且与寻求帮助无关。
尼古拉斯
解决方案
函数find_in_set可用于在逗号分隔的字符串中查找字符串。
如果没有找到则返回 0。
如果进行分组,则可以在 HAVING 子句中使用它来根据 GROUP_CONCAT 的结果进行过滤。
SELECT
p.id,
p.name,
group_concat(a.allergen_id) as allergens
FROM local_product p
LEFT JOIN local_product_allergen a
ON a.local_product_id = p.id
WHERE p.name like '%milk%'
GROUP BY p.id, p.name
HAVING find_in_set(p.id, allergens) = 0
对reextester 的测试在这里
推荐阅读
- javascript - 在本地系统中工作,但在服务器中上传时不工作
- java - 编辑 Java 类文件
- python - 如何在python中对具有特定键值的复杂json进行排序
- oracle - oracle数据库数据从一个到多个相关表同步
- asp.net - 实体框架多对多关系错误
- sorting - 如何使用 WebMethods (Software AG) 中的流程步骤执行排序?
- spring - RestTemplate 读取超时不起作用
- javascript - 为什么javascript无法捕获json属性值
- css - react js中css样式中&的含义是什么
- sql - Oracle:键的约束