У меня есть запрос, в котором я использую UNION для объединения двух похожих запросов в один, в результатах я хотел бы, чтобы результат первого запроса был перед результатами второго запроса, однако UNION по умолчанию дает смешанные результаты. Это мой исходный запрос:
SELECT users.name, users.last_name
FROM users
WHERE users.name LIKE 'Paulo%'
UNION
SELECT users.name, users.last_name
FROM users
WHERE users.name LIKE '%Paulo%';
Результат:
name | last_name
-------------+-----------
João Paulo | Silva ----> Second subquery
Paulo | Roberto ----> First subquery
Pedro Paulo | Camargo ----> Second subquery
Возможное решение, которое я нашел, состояло в том, чтобы добавить атрибут в подзапрос, где я сообщаю позицию объекта, однако это мешало группировке UNION, вызывая дублирование результатов.
SELECT 1 as position, users.name, users.last_name
FROM users
WHERE users.name LIKE 'Paulo%'
UNION
SELECT 2 as position, users.name, users.last_name
FROM users
WHERE users.name LIKE '%Paulo%'
ORDER BY position;
Результат:
position | name | last_name
----------+-------------+-----------
1 | Paulo | Roberto
2 | João Paulo | Silva
2 | Paulo | Roberto (Duplicate record)
2 | Pedro Paulo | Camargo
Теперь мне нужно решение, чтобы игнорировать повторяющиеся записи конечного результата.