2013-06-24 1 views
0

У меня есть таблица со следующими столбцами: product_attribute_id,product_id,attribute_id,attribute_valueMySQL выбрать, где и с несколькими одинаковыми переменными

Данные в таблице выглядит следующим образом:
0,1,1,something
1,1,2,somethingelse
2,1,3,somethingelses

Я бы хотел бы сделать что-то вроде этого:

SELECT product_id FROM table WHERE attribute_id = 1 AND attribute_id = 2 AND attribute_id = 3 

Я понимаю, почему это не работает, мне просто нужно получить идентификатор продукта, который STRICTLY имеет атрибут_ид 1,2,3, используя IN, вероятно, не может быть и речи.

Есть ли способ в mysql для достижения этого?

Thx за ваше время :)

+1

Вы можете использовать 'OR' вместо' AND' –

+0

Я действительно не понимаю, почему IN не может быть и речи ??? В найдете все, у которых есть id 1,2,3 ..... но вы говорите, потому что вы хотите выбрать, где 1 И 2 ​​И 3, но как это будет возможно, что ОДИН ДЕТАЛЬ может быть все ТРИ ??? ? – KyleK

+0

Очевидно, это может быть, доказательство этого оказалось. – JTC

ответ

3

Это пример запроса "наборы набор-в-". Вы ищете все три атрибута в данном продукте.

Я хотел адресовать их с агрегацией и п having, потому что это наиболее гибкий подход:

select product_id 
from table t 
group by product_id 
having max(attribute_id = 1) > 0 and 
     max(attribute_id = 2) > 0 and 
     max(attribute_id = 3) > 0 
0

Использование WHERE IN ..

Как так ...

SELECT product_id FROM table WHERE attribute_id IN (1,2,3); 

Я не понимаю, почему вы говорите "IN это может быть и речи" ??

Вы можете также использовать OR, как это ...

SELECT product_id FROM table WHERE attribute_id = 1 OR attribute_id = 2 OR attribute_id = 3 
0

Вы можете использовать OR вместо AND

SELECT product_id FROM table WHERE attribute_id = 1 OR attribute_id = 2 OR attribute_id = 3 
0

Вы также можете использовать UNION

SELECT product_id FROM table WHERE attribute_id = 1 
UNION 
SELECT product_id FROM table WHERE attribute_id = 2 
UNION 
SELECT product_id FROM table WHERE attribute_id = 3 
+0

Он работает как 'IN' или' OR', это не то, что я смотрел – JTC

1
SELECT product_id 
FROM table 
GROUP BY product_id 
HAVING sum(case when attribute_id = 1 then 1 else 0 end) > 0 
AND sum(case when attribute_id = 2 then 1 else 0 end) > 0 
AND sum(case when attribute_id = 3 then 1 else 0 end) > 0