Чтобы различать, из какой части UNION строка, можно добавить в список выборки SELECT
дополнительный столбец с константой. Сделаем это для наших таблиц table1
и table2
:
Было:
SELECT *
FROM table1
# | value |
---|---|
1 | 1 |
2 | 3 |
3 | 5 |
SELECT *
FROM table2
# | value |
---|---|
1 | 2 |
2 | 3 |
3 | 4 |
SELECT value
FROM table1
UNION
SELECT value
FROM table2
# | value |
---|---|
1 | 1 |
2 | 3 |
3 | 5 |
4 | 4 |
5 | 2 |
Добавим к объединению дополнительный столбец source
SELECT value,
'from_table_1' AS source
FROM table1
UNION
SELECT value,
'from_table_2' AS source
FROM table2
В результате выполнения запроса получим
# | value | source |
---|---|---|
1 | 1 | from_table_1 |
2 | 3 | from_table_1 |
3 | 5 | from_table_1 |
4 | 2 | from_table_2 |
5 | 3 | from_table_2 |
6 | 4 | from_table_2 |
Обрати внимание, что строки с value = 3
стало две. Строки стали различаться благодаря столбцу source
.
Стоит отметить, что запрос можно было написать короче, не назначая псевдоним второму столбцу выборки из table2
:
SELECT value,
'from_table_1' AS source
FROM table1
UNION
SELECT value,
'from_table_2'
FROM table2
Так как в первом запросе столбцу назначен псевдоним, то во втором запросе его можно не указывать. Но мы рекомендуем указывать псевдонимы для всех столбцов. В реальных запросах скорее всего появятся дополнительные таблицы, условия соединения и условия отсечения строк, которые отделят списки выборки запросов друг от друга. Псевдоним во втором запросе объяснит назначение константы и упростит восприятие запроса в целом.