#mysql #sql
#mysql #sql
Вопрос:
Я думаю, что это простая задача, но мне нужна помощь, чтобы решить ее:
id product option suboption
-----------------------------------
118 A 1 1
119 A 2 2
120 A 3 1
121 B 1 2
122 B 2 2
123 B 3 1
124 C 1 1
125 C 2 2
126 C 3 1
Мне нужно найти все уникальные продукты, где для option = 1 тогда suboption = 1, для option = 2 тогда suboption = 2, а для option = 3 тогда suboption = 1.
В этом примере те, которые заполняют мой запрос, — это продукты A и C.
Как я могу выполнить этот запрос?
Ответ №1:
Вы можете использовать group by
и having
. Вот один из методов:
select product
from t
where (option, suboption) in ( (1, 1), (2, 2), (3, 1) )
group by product
having count(distinct option) = 3;
В вашем примере данных для каждого продукта есть только один вариант. Если это так, то используйте:
having count(*) = 3
вместо count(distinct)
.
Ответ №2:
Вы можете группировать по продукту:
select
product
from tablename
group by product
having
sum(option = 1 and suboption = 1) > 0
and
sum(option = 2 and suboption = 2) > 0
and
sum(option = 3 and suboption = 1) > 0