繁体   English   中英

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

[英]How can I SELECT DISTINCT rows from two columns from the same table ignoring bidirectional similars?

我有一个表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等忽略双向相同( arrive / depart ),但包括双向唯一。

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

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

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

询问:

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
)

DB Fiddle 上的演示

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

另一种解决方案是使用主键id表中重复项的第一次出现,根据评论,该表在表中可用:

SELECT depart, arrive
FROM mytable t
WHERE NOT EXISTS (
    SELECT 1 
    FROM mytable t1
    WHERE t1.arrive = t.depart AND t1.depart = t.arrive AND t1.id < t.id
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM