Mysql查询需要具有一对多关系才能进行匹配搜索


Mysql Query required with one to many relation for searching with matching

第一个表

属性

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

我想用三个选项(terracebalconygaraj)过滤属性

如果用户选中三个选项,那么只有那些属性会出现,它们有三个选项而不是两个或一个。

我会使用聚合和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