我正在尝试进行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