Избегайте повторяющихся строк в запросе UNION с помощью ORDER BY SortKey - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть запрос 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 и сохраняйте порядок сортировки.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

Вы можете просто выбрать все строки, которые соответствуют какому-либо условию, и решить, какой SortKey использовать с CASE.В зависимости от используемой СУБД синтаксис может различаться.

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.

0 голосов
/ 04 апреля 2019

Попробуйте это:

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

Живой пример:

Справка:

...