第一个表
属性
id Name
1 ABC
2 XYZ
3 GHQ
属性选项
id property_id option
1 1 terrace
2 1 balcony
3 1 garaj
1 2 terrace
2 2 balcony
3 2 garaj
我想用三个选项(terrace
、balcony
和garaj
)过滤属性
如果用户选中三个选项,那么只有那些属性会出现,它们有三个选项而不是两个或一个。
我会使用聚合和group by
:
select p.propertyid
from property p
group by p.propertyid
having sum(property_option = 'terrace') > 0 and
sum(property_option = 'balcony') > 0 and
sum(property_option = 'garaj') > 0;
每个条件都会统计属性出现的次数。这是一种灵活的方法。如果你想要前两个,但不是"garaj",你会使用:
having sum(property_option = 'terrace') > 0 and
sum(property_option = 'balcony') > 0 and
sum(property_option = 'garaj') = 0;
试试这个:
select Name from Property where id in (select property_id from Property_Options where Property_Option = 'terrace ' and Property_Option = 'balcony ' and Property_Option = 'garaj')a
这是的确切答案
从属性p中选择p.id,p.name INNER JOIN property_option po ON p.id=po.properties_id group by p.idsum(po.meta_name="露台")>0,sum