首页 > 解决方案 > 在 SQL 中的同一字段(不是不同的字段)上同时使用(或)和(和)操作

问题描述

我有三张表,多对多关系

在此处输入图像描述

如果我插入数据,表格将如下所示

在此处输入图像描述

我想获取产品名称,其中 (propertyValue='ios' or propertyValue = 'android') 和 (propertyValue='black')

换一种方式,我们可以说

我想在 (propertyid='2' 或 propertyid = '4') 和 (propertyid='3') 处获取产品名称

我尝试了第二种方法,并且有一个 SQL:

Select DISTINCT(p.productname),p.productid
from Products p
left join Product_propertyvalue ppv on p.productid=ppv.productid
where ( ppv.propertyvalueid=2 or ppv.propertyvalueid=4) and ( ppv.propertyvalueid=3 )

标签: mysqlsql

解决方案


您可以使用having

select p.productname, p.productid
from Products p left join
     Product_propertyvalue ppv 
     on p.productid = ppv.productid
group by p.productname, p.productid
having sum( ppv.propertyvalueid in (2, 4) ) > 0 and
       sum( ppv.propertyvalueid = 3 ) > 0;

sum()条件检查给定产品的每个属性是否存在。


推荐阅读