我正在做一个关于TN的景点的数据库,这是我的表
我想找到任何特定城市的景点数量和城市名称
我想列出某个城市的名称和景点 我该怎么做呢?
我为第二个尝试这个但是它不起作用
# sudo iptables -L -t nat -v
有什么建议吗?
这就是我得到的
答案 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;