避免在UNION查询中使用ORDER BY SortKey重复行

时间:2019-04-04 14:02:13

标签: sql duplicates union

我有需要删除重复数据的UNION查询:

SELECT *, 0 as SortKey
FROM house
WHERE door LIKE "green"
UNION
SELECT *, 1 as SortKey
FROM house
WHERE door LIKE "red"
ORDER BY sortkey ASC

UNION应该删除行的重复数据,但是“ 0作为SortKey”和“ 1作为SortKey”使此操作变得不可能,因为我想按SortKey 0而不是SortKey 1来排序此查询。

如何删除此查询?

...

也许我的榜样还不够完善。 https://rextester.com/BUFGE49859 我需要这个结果:

id nom classement SortKey

1 9946蓝河1112 1

2 9945蓝屋1113 1

4 9944红房子1114 3

5 9943温室1115 3

避免9945重复并保留SortKey顺序。

2 个答案:

答案 0 :(得分:1)

您只需选择符合任一条件的所有行,然后确定要与CASE一起使用的SortKey。根据使用的DBMS,语法可能会有所不同。

SELECT *,
  CASE
    WHEN door LIKE "green" THEN 0
    WHEN door like "red" THEN 1
  END as SortKey
FROM house
WHERE door LIKE "green" or door LIKE "red"
ORDER BY SortKey

如果您希望重复项具有1而不是0,那么只需切换CASE语句的顺序即可。

答案 1 :(得分:0)

尝试:

SELECT DISTINCT door, SortKey FROM (
    SELECT *, 0 as SortKey FROM house WHERE door LIKE 'green'
    UNION
    SELECT *, 1 as SortKey FROM house WHERE door LIKE 'red'
) a ORDER BY Sortkey ASC

实时示例:

参考: