2013-07-13 4 views
0

Заранее спасибо за помощь.Несколько запросов MySQL из одной таблицы

У меня есть таблица с атрибутами. В этой таблице указаны номера позиций продукта (pin) и номера атрибутов. Каждый атрибут для штыря находится в отдельной строке

Ex.

pin attribute 
111  4 
111  5 
111  10 
112  4 
112  5 
... 

Я пытаюсь найти запрос, который позволит мне сказать, «Выберите шпильку, если атрибут = 4 и атрибут = 5»

Атрибуты будет цвет, размер и т.д .. поэтому получить все записи красного цвета (4) и размера Small (5).

В приведенном выше примере, было бы вернуть штыри 111 и 112.

Mike

+0

ты все еще имея проблема с этим запросом? –

ответ

1

Это должно работать для вас, используя count с distinct:

select pin 
from attributes 
where attribute in (4,5) 
group by pin 
having count(distinct attribute) = 2 

Это вернет булавок, которые имеют оба атрибута 4 и 5.

+0

Спасибо! Он работал точно так, как я хотел. – user2579643

+0

@ user2579643 - np, рад, что я мог бы помочь! – sgeddes

0

Это пример запроса «set-in-sets». Я защищаю это с помощью агрегации и предложения having. Для вашего примера это будет выглядеть так:

select pin 
from attributes 
group by pin 
having sum(attribute = 4) > 0 and 
     sum(attribute = 5) > 0; 

Причина, по которой мне нравится этот подход, заключается в гибкости. Если вы хотите, атрибуты следующим 4 или 5, запрос будет:

having sum(attribute = 4) > 0 or 
     sum(attribute = 5) > 0; 

Если вы хотите 4 и 5, и ничего больше:

having sum(attribute = 4) > 0 and 
     sum(attribute = 5) > 0 and 
     sum(attribute not in (4, 5)) = 0; 
0
select pin, 
group_concat(distinct attribute order by attribute) as atts 
from attributes 
where attribute in (4,5) 
group by pin 
having (atts = '4,5'); 

fiddle

Смежные вопросы