内连接声明?

时间:2017-04-28 11:26:35

标签: mysql sql

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

Cities table

enter image description here

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

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

我为第二个尝试这个但是它不起作用

# sudo iptables -L -t nat -v

有什么建议吗?

这就是我得到的

enter image description here

4 个答案:

答案 0 :(得分:2)

正如我在评论中提到的:你错过了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

答案 1 :(得分:1)

你想要更多这样的东西用于计数部分:

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,但现在您正在进行交叉连接。

如果您想指定要选择的特定城市,请在WHERE之后添加JOIN,并执行WHERE Cities.cities_ID = n之类的内容,其中n是ID。

答案 2 :(得分:1)

您的问题需要两个查询。

按城市划分的景点数量:

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模式。

(我们都去过那里。)

答案 3 :(得分:0)

假设两个表之间存在一对多的关系,您在查询中缺少一个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;