У меня есть несколько таблиц, которые имеют одни и те же столбцы. Мне нужно создать запрос/представление, в котором я вертикально объединяю эти столбцы. Кроме того, мне нужен второй столбец, содержащий имя таблицы, из которой берется конкретное значение.
Вот схема моей игрушки:
CREATE TABLE table_1 (ID INTEGER);
CREATE TABLE table_2 (ID INTEGER);
Предположим, что таблицы содержат следующие значения:
table_1
ID
1
2
3
table_2
ID
4
5
2
Мой результат должен выглядеть так:
table_result
ID SourceTable
1 table_1
2 table_1
3 table_1
4 table_2
5 table_2
2 table_2
Да, в самом деле. Я отредактировал свой пример.
SELECT ID, 'table_1' AS SourceTable FROM table_1
UNION ALL
SELECT ID, 'table_2' AS SourceTable FROM table_2
Обратите внимание, что это предпочтительнее простого использования UNION
, так как это также удаляет дубликаты. UNION ALL
не тратит ресурсы на дедупликацию чего-либо.
Используйте union all
:
select id, 'table_1' as sourcetable
from table_1
union all
select id, 'table_2' as sourcetable
from table_2;
Что делать, если один и тот же идентификатор находится в обеих таблицах? Хотели бы вы, чтобы это было дважды в наборе результатов?