我需要你的帮助来解决一个难的mysql查询。
我有一个包含这样条目的表格:
id_table|id_attribut|id_product|value
1 | 12| 23| #35#
2 | 15| 23| #12#
3 | 21| 23| test
1 | 12| 24| #35#
2 | 15| 24| #13#
3 | 21| 24| test
我想选择id_product,其中(id_attribut ='12'和值LIKE'%#35#%')AND(id_attribut ='15'和值LIKE'%#12#%')。 所以我写道:
SELECT * FROM attribut
WHERE (id_attribut='12' AND value LIKE '%#35#%')
AND (id_attribut='15' AND value LIKE '%#12#%')
GROUP BY id_product
- >但它没有用:(
我也尝试在同一个表上进行内部联接,但获得结果的速度非常慢。
有什么建议吗?
谢谢!
答案 0 :(得分:3)
您希望匹配不同行的条件。您的where
子句将因条件不一致而失败 - 它们不能同时在一行中成立。相反,您需要使用having
子句:
SELECT id_product
FROM attribut
GROUP BY id_product
HAVING SUM(id_attribut='12' AND value LIKE '%#35#%') > 0 AND
SUM(id_attribut='15' AND value LIKE '%#12#%') > 0;
答案 1 :(得分:0)
select语句返回与您设置的条件匹配的行。在这种情况下,您的条件为:
"返回id_attribut='12' AND value LIKE '%#35#%'
同时(AND
)id_attribut='15' AND value LIKE '%#12#%'
行SELECT * FROM attribut WHERE (id_attribut='12' AND value LIKE '%#35#%')
OR (id_attribut='15' AND value LIKE '%#12#%') GROUP BY id_product;
的行{{1}}"。这些行不存在,因为它们只能为 id_attribut 和值字段都有一个值。
我建议将中间的 AND 更改为 OR ,看看它是否适合您:
{{1}}