我有一个包含以下列的表:

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


我只想要合作伙伴有83号和71号产品的生产线
这样地:
id | partner_id | product_id
-----------------------------
1  |   2        |   71
2  |   2        |   83
4  |   4        |   83
5  |   4        |   71


非常感谢你的帮助:-)

最佳答案

您可以使用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

关于mysql - 两列的SQL查询过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58100692/

10-09 05:05