有可能会有人问这个问题,但我并不完全确定如何说出来这会让搜索答案有点困难。
我有一份住宿列表(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>
希望这足以解释它,但如果您需要更多信息,请告诉我。
答案 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')
根据您的条件确定了列名。但这应该可以满足您的需求。