Фильтр SQL-запросов на две колонки - PullRequest
1 голос
/ 25 сентября 2019

У меня есть таблица с такими столбцами:

id | partner_id | product_id
-----------------------------
1  |   2        |   71
2  |   2        |   83
3  |   3        |   71
4  |   4        |   83
5  |   4        |   71
6  |   5        |   22
7  |   4        |   55

Мне нужны только строки, где partner_id имеет product_id 83 И 71, например:

id | partner_id | product_id
-----------------------------
1  |   2        |   71
2  |   2        |   83
4  |   4        |   83
5  |   4        |   71

Большое спасибоза вашу помощь: -)

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Вы можете использовать exists:

select t.*
from t
where t.product_id in (71, 83) and
      exists (select 1
              from t t2
              where t2.partner_id = t.partner_id and
                    t2.product_id in (71, 83) and
                    t2.product_id <> t.product_id
             );

Однако, это может иметь смысл также, если вы хотите только партнеров.В этом случае вы можете использовать group by:

select partner_id
from t
where product_id in (71, 83)
group by partner_id
having count(*) = 2;  -- assuming no duplicates
0 голосов
/ 25 сентября 2019
select * from tableName where product_id = 71 or product_id = 83
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...