【问题标题】:How to Join three semi related tables如何连接三个半相关的表
【发布时间】:2012-06-26 01:02:30
【问题描述】:

我在 Mysql 数据库中有三个表——国家、城市和酒店。他们的关系是:国家有很多城市,城市有很多酒店。

我希望能够选择给定特定国家/地区.id 的所有酒店。我的 SQL 很弱。我想出的连接语句如下,它总是返回 0 行。

SELECT 
    countries.name as country,
    cities.name as city,
    hotels.name as hotel
FROM 
    countries
    left join cities
        on countries.id = cities.country_id
    left join hotels
        on cities.id = hotels.city_id

WHERE
    countries.id = @id

帮助?

【问题讨论】:

  • 你在设置@id的值吗?尝试将@id 替换为实际值,例如 1。“countries.id = 1”,具体取决于您的实际国家/地区 ID
  • 我认为该声明没有任何问题。您的国家/地区表实际上是否包含任何数据?你在@id 中传递了什么? select * from countries 返回什么?
  • face palm 我使用的国家 ID 没有任何匹配记录。我不能给评论一个正确的答案,我可以吗? xP
  • @Shafee - Bryan 首先发布了建议。你可以让他写下来作为答案并接受。

标签: mysql join left-join


【解决方案1】:

尝试关闭 where 子句,看看你实际上有哪些记录。也许您使用的特定 ID 不是已知的国家/地区 ID。


另外,就严格的格式/样式问题而言,恕我直言,这更好:

SELECT 
    countries.name as country,
    cities.name as city,
    hotels.name as hotel
FROM countries
left join cities on cities.country_id = countries.id
left join hotels on hotels.city_id = cities.id
WHERE countries.id = @id

【讨论】:

    【解决方案2】:

    我的经验法则是始终以我想要的实际事物的表作为我的结果来开始我的 FROM 子句。

    SELECT 
      countries.name as country,
      cities.name as city,
      hotels.name as hotel
    FROM  
      hotels JOIN cities ON cities.id = hotels.city_id
      join countries on countries.id = cities.country_id
    WHERE
      countries.id = @id
    

    额外的好处是您不需要外部连接:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2013-10-12
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      相关资源
      最近更新 更多