Чтобы различать, из какой части 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
Так как в первом запросе столбцу назначен псевдоним, то во втором запросе его можно не указывать. Но мы рекомендуем указывать псевдонимы для всех столбцов. В реальных запросах скорее всего появятся дополнительные таблицы, условия соединения и условия отсечения строк, которые отделят списки выборки запросов друг от друга. Псевдоним во втором запросе объяснит назначение константы и упростит восприятие запроса в целом.