可能有人问过这个问题,但我不太清楚该怎么说,这使得寻找答案有点困难。
我有一张住宿列表(listingid(主键)、列表名称、描述等)。然后,我有另一个与每个列表相关的属性表(attributeid(主键)、listingid、attribute)。每个属性在表中占据自己的行-我意识到这可能更聪明,但继承了数据结构。
我想要达到的目标是:

SELECT all listings where attributes have "WiFi" AND "Air Conditioning" AND "Swimming Pool"

除了这些必须具有的属性之外,我只想返回与以下任何一项匹配的列表:“Motel”、“Hotel”、“Apartment”。
我最初是在attributes表上执行一个内部连接,然后转到WHERE (attribute = "X" AND attribute = "Y") AND (attribute = "XX" OR attribute = "YY"),但意识到这个语句的开头永远不会匹配多行,因为它只检查一行。所以需要考虑连接(或子查询)的整个结果这就是我需要扩展对SQL理解的地方。
我真的不想按照我的典型路线创建x个数量的子查询,因为我认为这会使整个查询非常慢-特别是如果用户选择了十几个或更多的属性进行搜索。
希望这足够解释,但让我知道如果你需要更多的信息。

最佳答案

这样的做法应该管用:

select
    acc.*
from
    accomodation acc
    join attribute air on acc.id = air.accomodation_id and air.name='Air'
    join attribute pool on acc.id = pool.accomodation_id and pool.name='Pool'
    and acc.type in ('Motel', 'Hotel', 'Appartment')
;

关于mysql - MySQL查询获取联接表结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31690463/

10-14 00:21