[英]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
/ arrive
和arrive
/ depart
的不同来产生一个独特的/独特的输出 - 但不是那些双向相同的。 因此,上面的结果将是:
depart | arrive
______________________
New York | London
New York | Paris
Washington | Rome
New York | Washington
Rome | New York
直接获得不同的基础depart
/ arrive
,但不能获得任何JOIN
, UNION
等忽略双向相同( 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
)
| 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.