我正在尝试进行SQL查询。我对SQL还是很陌生,也许有人可以给我一些指导,或者甚至可以告诉我。

请注意,我已经阅读了IN,ALL,INNER JOIN等内容,但仍然无法获得正确的查询。我试图寻找解决方案已有几个小时。

这些是我的表格列:

+-----------+---------------+------+-----+---------+-------+
| Field     | Type          | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| route     | varchar(100)  | NO   | PRI | NULL    |       |
| stopID    | varchar(5)    | NO   | PRI | NULL    |       |
| stopName  | varchar(100)  | NO   |     | NULL    |       |
| Latitude  | float(10,6)   | YES  |     | NULL    |       |
| Longitude | float(10,6)   | YES  |     | NULL    |       |
| timeList  | varchar(1000) | NO   |     | NULL    |       |
| day       | varchar(5)    | NO   | PRI | NULL    |       |
+-----------+---------------+------+-----+---------+-------+


我需要stopId和stopName,其中stopName与具有不同stopID的另一个stopName匹配,并且day ='Week'(否则,由于有Week,Sat和Sun天,总共将返回3个结果。)。

| 16    | 1639   | MYUNIQUESTOPNAME  |   43.514000 |  -80.199600 | (a really long list of times) | Week  |
| 5     | 0530   | MYUNIQUESTOPNAME  |   43.514000 |  -80.199600 | (a really long list of times) | Week  |

SELECT stopID,stopName FROM Routes WHERE stopName='MYUNIQUESTOPNAME' AND day='Week';
+--------+---------------------------+
| stopID | stopName                  |
+--------+---------------------------+
| 1612   | MYUNIQUESTOPNAME          |
| 1639   | MYUNIQUESTOPNAME          |
| 0530   | MYUNIQUESTOPNAME          |
+--------+---------------------------+


给我我想要的东西,但这只是一站式服务,按照这种方式,我将必须手动进行。有很多站。
其次,我然后希望所有没有匹配项的ID和名称(对于公交路线是唯一的)。

SELECT stopID,stopName FROM Routes WHERE stopName IN (SELECT stopName FROM Routes WHERE day='Week') AND day='Week';


上面没有给我我想要的东西。我所有的搜索都暗示这是……我在做错什么……?

mysql版本是5.5.41-0 + wheezy1

最佳答案

在列(stopName)的表(路线)上进行自联接,然后获取所有结果,其中day = week和stopIds不相同。这将为您提供第一个查询的答案

Select unq.stopId, unq.stopName from Routes unq join Routes other on other.stopName=unq.stopName where unq.stopId!= other.stopId and unq.day = 'Week'


对于第二个只需要唯一记录的记录,请按停止名称进行分组,并选择仅在一个记录中分组的记录

Select unq.stopId, unq.stopName from Routes unq group by unq.stopName having count(*) = 1

10-08 04:05