【问题标题】:Avoid duplicate rows in UNION query with ORDER BY SortKey使用 ORDER BY SortKey 避免 UNION 查询中的重复行
【发布时间】:2019-08-26 07:50:10
【问题描述】:

我有 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 顺序。

【问题讨论】:

  • 向我们展示一些示例表数据和预期结果 - 都是格式化文本,而不是图像。
  • 如果你问我,标题有点误导。
  • 我使用 PHPMyAdmin。
  • @TT 我改标题

标签: sql duplicates union


【解决方案1】:

您可以只选择与任一条件匹配的所有行并决定将哪个 SortKey 与 CASE 一起使用。根据您使用的 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 语句的顺序即可。

【讨论】:

    【解决方案2】:

    试试这个:

    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
    

    现场示例:

    参考:

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2011-04-10
      • 2011-12-20
      • 1970-01-01
      相关资源
      最近更新 更多