如何从同一个表格的两列中选择DISTINCT行,而忽略双向相似?

时间:2019-02-28 23:53:41

标签: mysql sql

我有一个表flight如下:

arrive      | depart
-------------------
New York    | London
New York    | Paris
Washington  | Rome
London      | New York
Rome        | Washington
New York    | Washington
New York    | London
Rome        | New York
Washington  | Rome

而且我想根据与depart / arrivearrive / depart不同的内容来产生不同的/唯一的输出-但不是双向的相同。因此,上面的结果将是:

depart      | arrive
______________________
New York    | London
New York    | Paris
Washington  | Rome
New York    | Washington
Rome        | New York

直接获得不同的基础depart / arrive,但不能获得任何JOINUNION等来忽略双向相同的内容({{1} / arrive),但包含双向唯一。

拔出头发-需要帮助。谢谢

1 个答案:

答案 0 :(得分:1)

您可以将NOT EXISTS条件与相关子查询一起使用以删除重复项。

但是要记住的一件事是,为了获得一致的结果集,您需要定义一个规则来告诉两个目的地中的哪个被视为depart,哪个是{{1 }}。由于您未提供规则,因此我选择将字母顺序最低的值设为arrive

查询:

depart

Demo on DB Fiddle

SELECT
    LEAST(depart, arrive) depart,
    GREATEST(depart, arrive) arrive
FROM mytable t
WHERE NOT EXISTS (
    SELECT 1 
    FROM mytable t1
    WHERE t1.arrive = t.depart AND t1.depart = t.arrive AND t1.depart > t.depart
)

另一种解决方案是使用主键| depart | arrive | | -------- | ---------- | | New York | Paris | | London | New York | | Rome | Washington | | New York | Washington | | New York | Rome | 从表中选择重复项的第一个匹配项,根据注释,该主键在表中可用:

id