如果一个或多个匹配,SQL/MYSQL将弹出整个集合
如果一个或多个值与集合匹配,如何弹出整个表1 id 举个例子: 表1称为“产品”,表2称为“过敏原” 每个表都有多对多关系(许多产品可能有许多过敏原) 我提出以下要求:如果一个或多个匹配,SQL/MYSQL将弹出整个集合,mysql,join,mariadb,Mysql,Join,Mariadb,如果一个或多个值与集合匹配,如何弹出整个表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.aller
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
如果一个或多个值与过敏原行匹配,我想弹出结果“milk”@ID=1,以获得该结果:
2 | Soy Milk | 4
感谢有人能帮助我,显然这是一个简化的请求,因为原来的请求要长得多,与请求帮助无关
Nicolas该函数可用于在逗号分隔的字符串中查找字符串。如果找不到,则返回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
在rextester上进行测试非常感谢,
它只使用一个值,但不使用多个值,除非值的顺序正确
我在帮助下找到了正确的解决方案:
现在它起作用了:)
SELECT
p.id,
p.name
FROM
local_product p
WHERE
p.id NOT IN ( SELECT local_product_id FROM local_product_allergen WHERE allergen_id IN (1,2) )