gpt4 book ai didi

mysql - 为公共(public)表属性编写多对多查询

转载 作者:行者123 更新时间:2023-11-29 07:22:08 25 4
gpt4 key购买 nike

我已经很长时间没有直接使用 MySQL 了,所以为了好玩,我有一个基于纽约地铁系统的 MySQL 列车信息数据库。我有一个 Station 表和 Route 表,两者之间存在多对多关系。

我想要做的是找出两条或更多条不同路线有哪些共同点。我正在尝试不同的连接技术,但它们似乎都不起作用(我可能语法错误)。

例如,我想查看哪些车站同时提供路线“1”和“2”(即这些路线有哪些公共(public)车站?)。

mysql> describe station;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(45) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+----------------+

mysql> describe route;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | YES | | NULL | |
+-------+------------+------+-----+---------+----------------+

它们之间的表称为 RouteStation,它具有两个表中每个表的 ID。

我想要的查询是查找为任意一组路线提供服务的车站名称。因此,在这个示例中,我想查找为路线“1”和“2”提供服务的车站名称。

SELECT Station.name FROM Station
JOIN RouteStation ON (Station.id = RouteStation.stationId)
JOIN Route ON (Route.id = RouteStation.routeId)
WHERE Route.name = "1" AND Route.name = "2";

我知道最后一部分可能有问题,因为路线名称不可能同时为“1”和“2”,但我希望我正在寻找的要点是够清楚了。

编辑:RouteStation 架构:

mysql> describe routestation;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| stationId | int(11) | NO | MUL | NULL | |
| routeId | int(11) | NO | MUL | NULL | |
+-----------+---------+------+-----+---------+-------+

最佳答案

你能试试这个吗:

SELECT name
FROM station
WHERE id IN (
SELECT RS.stationId
FROM RouteStation RS
WHERE RS.routeId IN (1, 2)
GROUP BY RS.stationId
HAVING COUNT(RS.routeId) > 1
)

不应使用 AND,而应使用 OR 关键字:routeId = 1 OR routeId = 2。与 IN 关键字相同。

之后,我们使用了GROUP BY stationId,这样我们就可以COUNT routeIds,因为我们只需要HAVING的车站 多于 1 条路线。

关于mysql - 为公共(public)表属性编写多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com