MySQL查询获取连接表结果

时间:2015-07-29 02:50:34

标签: mysql sql

有可能会有人问这个问题,但我并不完全确定如何说出来这会让搜索答案有点困难。

我有一份住宿列表(listingid(主键),listing_name,description等)。然后我有另一个表用于与每个列表相关的属性(attributeid(主键),listingid,属性)。每个属性在表中占用自己的行 - 我意识到这可能更聪明但继承了数据结构。

我想要实现的目标是:

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

除了这些必须具有属性之外,我只想返回符合以下任何一项的列表:“汽车旅馆”,“酒店”,“公寓”。

我最初在属性表上执行INNER JOIN然后转到WHERE (attribute = "X" AND attribute = "Y") AND (attribute = "XX" OR attribute = "YY")但是意识到这个语句的开头永远不会匹配多行,因为它只是检查单行。那么需要考虑JOIN(或子查询?)的整个结果,这是我需要扩展我的SQL理解的地方。

我真的不想沿着我创建x量子查询的典型路线走下去,因为我认为这将使整个查询非常慢 - 特别是如果用户选择了十几个或更多属性来搜索。 / p>

希望这足以解释它,但如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

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')
;

答案 1 :(得分:0)

select l.listingid, l.listing_name 
from listings l join attributes a 
on l.listingid = a.listingid
where a.attribute = 'WiFi' 
and a.attribute = 'Air Conditioning' and a.attribute = 'Swimming Pool'
and l.description in ('Motel', 'Hotel', 'Apartment')

根据您的条件确定了列名。但这应该可以满足您的需求。