Я пытаюсь архивировать получение данных из похожих таблиц (структура столбцов одинакова), но также возвращает столбец table_origin
позволяющий впоследствии table_origin
таблицу.
Я пытался получить что-то вроде этого, работая в MySQL, но пока не добился успеха.
Возможно, что-то вроде этого (не работает):
SELECT * FROM (
SELECT *, 44 as table_origin FROM 'CustomerData_44'
) AS a FULL OUTER JOIN (
SELECT *, 58 as table_origin FROM 'CustomerData_58'
) AS b ON true;
Если вы пытаетесь получить строки из обеих этих таблиц с помощью table_origin
качестве столбца идентификатора, вы можете попробовать с помощью UNION
из нескольких операторов SELECT вместо использования соединения.
SELECT *, 44 as table_origin FROM 'CustomerData_44'
UNION
SELECT *, 58 as table_origin FROM 'CustomerData_58'
Каждый SELECT
отличается для выбранной таблицы и добавляет столбец table_origin
к результату, поэтому вы можете идентифицировать его позже.
Когда вам нужно включить повторяющиеся значения, вы можете использовать UNION ALL
вместо UNION
:
Поведение
UNION
умолчанию состоит в том, что дубликаты строк удаляются из результата. Дополнительное ключевое словоDISTINCT
не имеет никакого эффекта, кроме значения по умолчанию, поскольку оно также указывает удаление дубликатов строк. С необязательным ключевым словомALL
удаление дубликатов строк не происходит, и результат включает все соответствующие строки из всехSELECT
.
Однако в приведенном выше примере мы добавляем в подзапросы поле меток, и пока метки различны, мы можем встречать только повторяющиеся строки, если в исходных таблицах уже есть дубликаты. Если у вас есть уникальный ненулевой столбец (например, автоинкрементный id
часто), который не может произойти.
Когда вам нужны все значения, используйте UNION ALL
Заявление UNION делает DISTINCT
https://dev.mysql.com/doc/refman/5.5/en/union.html
В чем разница между UNION и UNION ALL?
SELECT *, 44 as table_origin FROM 'CustomerData_44'
UNION ALL
SELECT *, 58 as table_origin FROM 'CustomerData_58'
Отредактировал этот ответ в принятом ответе выше.
CustomerData_44
UNION SELECT *, 58 в качестве table_origin FROMCustomerData_58