自从我直接使用MySQL以来,这已经很长时间了,所以为了好玩,我有一个基于纽约地铁系统的列车信息MySQL数据库。我有一个Station
表和Route
表,并且两者之间存在多对多关系。编写一个多对多查询常用表格属性
我想要做的是找出哪些站有两个或更多的不同路线有共同点。我尝试了不同的连接技术,但他们都没有工作(我可能有语法错误)。因此,例如,我想看看哪些电台服务于路线“1”和“2”(即,这些路线中哪些电台有共同点?)。
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 | |
+-----------+---------+------+-----+---------+-------+
你能向我们展示'RouteStation'模式吗?谢谢 – KaeL
@KaeL我编辑了问题以显示模式。 –
@SameerMirji它不断返回一个“空集”。它适用于单个路由名称(例如“1”或“2”),如果我把'OR'而不是'AND',它只是给了我一切。 –