我有一个表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
等来忽略双向相同的内容({{1} / arrive
),但包含双向唯一。
拔出头发-需要帮助。谢谢
答案 0 :(得分:1)
您可以将NOT EXISTS
条件与相关子查询一起使用以删除重复项。
但是要记住的一件事是,为了获得一致的结果集,您需要定义一个规则来告诉两个目的地中的哪个被视为depart
,哪个是{{1 }}。由于您未提供规则,因此我选择将字母顺序最低的值设为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