MySQL查询获取连接表结果

标签 mysql sql

有可能有人问过这个问题,但我不完全确定如何措辞,这使得搜索答案有点困难。

我有一个住宿 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/

相关文章:

php - laravel join 查询为两个不同的数据返回两个相同的 id

sql - 如何在存储过程的t-sql动态语句中使用LIKE?

mysql - 将 JOIN 与 DISTINCT 结合使用并确定一张表的优先级

sql - 使用 count distinct 查找字段中具有 2 个或更多不同值的记录

c# - 使用 C# 检索表架构信息

mysql - 我应该将哪些列添加到 PRIMARY KEY

php - 使用php检查mysql中的时间戳冲突

php - 在 DataObject::get() 中编写自定义 SQL 查询

php - 在php sql语句中动态更改偏移量

mysql - SQL:在查询结果末尾添加短划线(-)