【问题标题】:inner join statement?内连接语句?
【发布时间】:2017-09-26 12:10:48
【问题描述】:

我正在做一个关于 TN 景点的数据库,这是我的表格

我想查找任何给定城市的景点数量和城市名称

我想列出给定城市的名称和景点 我该怎么做呢?

我尝试了第二个,但没有成功

SELECT attractions.attraction_Name, Cities.city_Name FROM Cities INNER JOIN attractions WHERE city_ID=1

有什么建议吗?

这就是我得到的

【问题讨论】:

  • 这里的大多数人想要格式化的文本而不是图像。
  • 查看 GROUP BY 和 COUNT()。
  • 您的查询有什么问题?也许缺少on 子句?
  • 我想你说的是两个结果,对吗?
  • @knowledge....是的,你是对的

标签: mysql sql


【解决方案1】:

正如我在评论中提到的:您错过了on 子句:

SELECT attractions.attraction_Name, Cities.city_Name 
FROM Cities INNER JOIN attractions on cities_ID=city_ID WHERE city_ID=1

你得到的东西叫做叉积。第一个表的每个条目都与第二个表的每个条目连接

Count 查询可能如下所示:

SELECT COUNT(*), Cities.city_Name 
FROM Cities 
INNER JOIN attractions ON attractions.city_ID = Cities.cities_ID
GROUP BY Cities.city_name

【讨论】:

    【解决方案2】:

    您希望计数部分更像这样:

    SELECT COUNT(attractions.attraction_Name), Cities.city_Name 
    FROM Cities 
    INNER JOIN attractions ON attractions.city_ID = Cities.cities_ID
    GROUP BY Cities.city_name
    

    对于列出景点和城市名称的其他查询:

    SELECT attractions.attraction_Name, Cities.city_Name 
    FROM Cities 
    INNER JOIN attractions ON attractions.city_ID = Cities.cities_ID
    

    您的加入中缺少ON。由于这是 MySQL,this is valid 但现在您正在进行交叉连接。

    如果要指定要选择的特定城市,请在JOIN 之后添加WHERE,然后执行类似WHERE Cities.cities_ID = n 之类的操作,其中n 是ID。

    【讨论】:

      【解决方案3】:

      您的问题需要两个查询。

      按城市划分的景点数量:

      SELECT Cities.city_Name, COUNT(*) number_of_attractions
        FROM Cities
        JOIN attractions ON Cities.cities_ID=attractions.city_ID
       GROUP BY Cities.city_Name
       ORDER BY Cities.city_Name
      

      每个城市所有景点的目录:

       SELECT Cities.city_Name, attraction.attraction_Name
        FROM Cities
        JOIN attractions ON Cities.cities_ID=attractions.city_ID
       ORDER BY Cities.city_Name, attraction.attraction_Name
      

      您在尝试解决这些问题时遗漏了两件事。首先,您的 JOIN 操作中缺少 ON 子句。如果没有 ON 子句,则 JOIN 会从两个表中生成所有可能的行对——组合爆炸可能会让你发疯。

      其次,您的摘要需要COUNT(*) ... GROUP BY 模式。

      (我们都去过那里。)

      【讨论】:

      • 非常感谢,第一个完美运行,但我正在为第二个获取所有景点名称和城市名称,如果我只想要一个城市怎么办?
      • 添加您的WHERE cities.cities_ID = 1 子句以将您的查询限制在一个城市。把它放在ORDER BY 子句之前。
      【解决方案4】:

      假设两个表之间存在一对多关系,您的查询中缺少一个 on 子句,但是一旦您正确连接两个表,您可以简单地使用 where 子句进行过滤:

      select c.city_name, a.attraction_name
       from cities c inner join attractions a on a.city_id = c.cities_id
       where city_id = 1;
      

      【讨论】:

        猜你喜欢
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多