多次在同一列上的mysql AND子句

Vij*_*har 2 mysql

我正在尝试检索具有多种便利设施的房产.

但表结构是:属性在property表中,设施与属性相关联.

设施表有:

id property_id amenity_name ....
Run Code Online (Sandbox Code Playgroud)

现在我想搜索有"停车"和"电梯"等设施.

select property_id from amenities where name = 'parking' and name = 'elevator';
Run Code Online (Sandbox Code Playgroud)

我不想为此启动连接查询.

在这种情况下,有人可以救我吗?

Cob*_*lue 6

试试这个:

SELECT property_id FROM amenities
WHERE amenity_name IN ('parking', 'elevator')
GROUP BY property_id 
HAVING COUNT(amenity_name) >= 2
Run Code Online (Sandbox Code Playgroud)

这是发生了什么......

首先,获取您感兴趣的设施的房产ID列表:

SELECT property_id FROM amenities WHERE amenity_name IN ('parking', 'elevator')

然后缩小列表以仅包括具有多个舒适性的那些属性ID.按property_id分组将结果捆绑到基于其所属property_id的唯一组中.然后,我们只计算每组中的amenity_names的数量,并检查它是否为2或更大.

GROUP BY property_id HAVING COUNT(amenity_name) >= 2

上面代码中的一个假设是,您不会多次使用与property_id相关联的amenity_name.要消除与此相关的问题,请将HAVING子句更改为包括DISTINCT以清除重复项,但除非您需要,否则不要添加它.

GROUP BY property_id HAVING COUNT(DISTINCT(amenity_name)) >= 2


Nic*_*ssu 5

select property_id 
from amenities 
where name in ('parking','elevator')
group by property_id
having count(distinct(name)) = 2
Run Code Online (Sandbox Code Playgroud)

  • 别客气。http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work ;) (2认同)