Выберите из нескольких одинаковых таблиц с происхождением

0

Я пытаюсь архивировать получение данных из похожих таблиц (структура столбцов одинакова), но также возвращает столбец 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;
  • 0
    используйте union SELECT *, 44 в качестве table_origin FROM CustomerData_44 UNION SELECT *, 58 в качестве table_origin FROM CustomerData_58
Теги:

3 ответа

0
Лучший ответ

Если вы пытаетесь получить строки из обеих этих таблиц с помощью 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 часто), который не может произойти.

1

Когда вам нужны все значения, используйте 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'
0

Отредактировал этот ответ в принятом ответе выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню