CONCATENATE — это объединение двух таблиц. В отличие от присоединения, где вторая таблица добавляется сбоку, объединение добавляет вторую таблицу снизу. При этом, как и в случае присоединения, результирующая таблица содержит полный набор полей из обеих таблиц. Объединение очень похоже на операцию SQL UNION с небольшими отличиями — префикс CONCATENATE может быть использован даже если набор полей в двух таблицах разный и полностью идентичные записи не удаляются из результата операции.
Если две таблицы содержат поля с одинаковыми именами, объединение выполняется автоматически. И такое автоматическое объединение частый источник ошибок у новичков. Эта важная деталь, о которой необходимо помнить.
Продемонстрируем работу префикса CONCATENATE на примере — пусть у нас есть две таблицы Продажи и Поставки и мы ходим объединить их в одну таблицу. Таблица Продажи выглядит следующим образом:
Дата
Время
Товар
Количество
Сумма
01.01.2020
14:32:00
Гвоздь
500
5000
02.01.2020
10:30:00
Шуруп
20
250
05.01.2020
16:51:00
Винт
300
4500
07.01.2020
13:47:00
Гайка
50
650
01.01.2020
10:43:00
Гвоздь
500
5000
02.01.2020
11:43:00
Винт
300
4500
05.01.2020
12:43:00
Гайка
50
650
Таблица Поставки в свою очередь выглядит так:
Дата
Товар
Количество
Поставщик
01.01.2020
Гвоздь
1000
ООО «Железная тема»
01.01.2020
Шуруп
50
ООО «Железная тема»
02.01.2020
Винт
1000
АО «Метализделие»
03.01.2020
Гайка
100
ИП Иванов
Скрипт загрузки данных и использования CONCATENATE выглядит следующим образом:
В скрипте данные обеих таблиц загружаются в одну таблицу с названием ДвижениеТоваров. Порядок загрузки таблиц не важен. Результирующая таблица будет выглядеть следующим образом:
Дата
Время
Товар
Количество
Сумма
Поставщик
02.01.2020
10:30:00
Шуруп
20
250
—
01.01.2020
10:43:00
Гвоздь
500
5000
—
02.01.2020
11:43:00
Винт
300
4500
—
05.01.2020
12:43:00
Гайка
50
650
—
07.01.2020
13:47:00
Гайка
50
650
—
01.01.2020
14:32:00
Гвоздь
500
5000
—
05.01.2020
16:51:00
Винт
300
4500
—
01.01.2020
—
Гвоздь
1000
—
ООО «Железная тема»
01.01.2020
—
Шуруп
50
—
ООО «Железная тема»
02.01.2020
—
Винт
1000
—
АО «Метализделие»
03.01.2020
—
Гайка
100
—
ИП Иванов
Обратите внимание на то, что в данных таблицы Поставки отсутствовали сведения в полях Время и Сумма поскольку таких столбцов просто не было в таблице Поставки, поэтому в результирующей таблице в строках из таблицы Поставки поля Время и Сумма заполнены пустыми значениями (NULL значениями).
Соответственно, и значения поля Поставщик для строк результирующей таблицы которые добавлены из таблицы Продажи заполнены пустыми значениями.
CONCATENATE or NOCONCATENATE
Как уже было отмечено в начале статьи, в случаях когда обе таблицы содержат полностью идентичные наименования полей, происходит автоматическое объединение результатом которого является одна таблица. Проще всего это представить на следующем примере — загрузим таблицу Продажи, а затем загрузим из нее данные в другую таблицу Продажи2:
Результатом выполнения скрипта будет не две таблицы, а одна. Таблица Продажи2 даже не будет создана — все строки таблицы Продажи загрузятся в нее же. Такая ошибка очень распространена у новичков. Чтобы избежать автоматического объединения двух таблиц используется префикс NOCONCATENATE. Префикс указывается перед оператором LOAD который может вызвать автоматическое объединение таблицы и результатов указанного ниже LOAD или SELECT запроса: