具有多个条件的复杂mysql查询

时间:2014-12-22 22:24:07

标签: mysql

我需要你的帮助来解决一个难的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

- >但它没有用:(

我也尝试在同一个表上进行内部联接,但获得结果的速度非常慢。

有什么建议吗?

谢谢!

2 个答案:

答案 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#%'同时(ANDid_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}}