我有一张航班表,其中有一个始发地和目的地城市,用外国身份证表示。

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

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的知识!

最佳答案

这样做:

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


DEMO

关于mysql - 如何在MySQL的多个列中首次显示数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19292165/

10-13 00:49