0

我有一张航班表,其中有一个出发地和目的地城市,表示为外国 ID。

此表的一个非常简化的示例如下所示:

id | origin | destination
023      1        3
044      3        2
332      2        1
509      1        3
493      1        4

我需要第一次看到一个城市作为起点或终点出现;包含尚未飞往或离开的城市的所有航班的列表。

对于上面的例子,我想得到的是:

023: 1, 3
044: 2 
493: 4

332 和 509 航班不在输出中,因为它们只访问已经访问过的城市。

这是我尝试过的:

(SELECT distinct(origin), distinct(destination) FROM flights ORDER BY id)

不起作用,因为您不能选择多个不同的列

SELECT (distinct(origin) FROM flights ORDER BY id) UNION (distinct (destination) FROM flights ORDER BY id)

由于语法错误而不起作用,但主要是因为它没有考虑到城市在起点终点列中应该是唯一的。

如果在 SQL 中没有快速的方法来执行此操作,我也很乐意迭代并跟踪已访问过的城市(这个应用程序实际上只有一个用户,他不关心几毫秒的计算,因为他已经 80 多岁了),但我很想知道,这样我就可以了解更多关于 SQL 的知识!

4

1 回答 1

2

这样做:

SELECT id, GROUP_CONCAT(city ORDER BY city) cities
FROM (
    SELECT city, min(id) id
    FROM (
        SELECT origin city, MIN(id) id
        FROM flights
        GROUP BY city

        UNION

        SELECT destination city, MIN(id) id
        FROM flights
        GROUP BY city) u
    GROUP BY city) x
GROUP BY id

演示

于 2013-10-10T10:15:12.997 回答