Запрос для получения строк по нескольким значениям

#mysql #sql #aggregate-functions #having-clause

#mysql #sql #агрегатные функции #having-предложение

Вопрос:

У меня есть таблица, например, такая:

id_product id_feature_value
1 60
2 60
1 40
2 10

Я хочу получить различные id_products, где id_feature_value = 60 и id_feature_value = 40 — это просто пример, потому что мне понадобится фильтр по большему количеству feature_values.

Комментарии:

1. SELECT DISTINCT id_products WHERE id_feature_value=60 AND id_feature_value=40 . Но это не приведет к выводу, потому что вы должны были сказать or , а не and . 😉

2. О скольких feature_value значениях вы говорите?

Ответ №1:

Если вам нужны продукты, обладающие обеими функциями, вы можете использовать group by и having :

 select id_product
from mytable
where id_feature_value in (40, 60)
group by id_product
having count(*) = 2
 

Это предполагает отсутствие дубликатов. В противном случае вам нужно count(distinct id_feature_value) = 2 .

Вы можете легко расширить это, чтобы обрабатывать больше функций для каждого продукта: вам просто нужно расширить in предложение и соответствующим образом изменить буквенный номер в having предложении.

Ответ №2:

либо используя distinct, либо в :

 select distinct id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)
 

или группировать по

 select id_products
from tablename
where id_feature_value IN ( 40, 60 , ...)
group by id_products