有可能有人问过这个问题,但我不完全确定如何措辞,这使得搜索答案有点困难。
我有一个住宿 list 表(listingid(主键)、listing_name、描述等)。然后我有另一个与每个列表相关的属性表(attributeid(主键)、listingid、attribute)。每个属性在表中占据自己的行 - 我意识到这可能更聪明,但继承了数据结构。
我想要实现的示例是:
SELECT all listings where attributes have "WiFi" AND "Air Conditioning" AND "Swimming Pool"
除了这些必须具有的属性外,我只想返回与以下任何一项匹配的列表:“汽车旅馆”、“酒店”、“公寓”。
我最初是在属性表上进行内部联接,然后转到 WHERE (attribute = "X"AND attribute = "Y") AND (attribute = "XX"OR attribute = "YY")
但意识到此语句的开头永远不会匹配多行,因为它只会检查一行。因此需要考虑 JOIN(或子查询?)的整个结果,这是我需要扩展我对 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查询获取连接表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690463/