У вас есть проблема в синтаксисе SQL, но вы не знаете причину - PullRequest
0 голосов
/ 22 января 2019
INSERT INTO tkblue_tklabel_dev_archdata.EmailContent2016
(
    SELECT tkblue_tklabel_dev_data.EmailContent.*
    FROM tkblue_tklabel_dev_data.EmailContent
    LEFT JOIN tkblue_tklabel_dev_archdata.EmailTracking ON tkblue_tklabel_dev_archdata.EmailTracking.id = tkblue_tklabel_dev_data.EmailContent.idEmailParam
    WHERE (tkblue_tklabel_dev_archdata.EmailTracking.EmailDate <= "2016-12-31 23:59:59" and tkblue_tklabel_dev_archdata.EmailTracking.EmailDate >= "2016-01-01 00:00:00"); 
);

В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '' в строке 6

Мне не удалось найти причину этой ошибки.

1 Ответ

0 голосов
/ 22 января 2019

В INSERT круглые скобки должны использоваться для перечисления столбцов, а не для запроса, генерирующего данные.

В этом случае вы, похоже, знаете, что данные имеют одинаковый формат, поэтому не рекомендуется использовать список столбцов - хотя create table as будет лучше, чем insert.

* 1007.* В любом случае:
INSERT INTO tkblue_tklabel_dev_archdata.EmailContent2016
    SELECT ec.*
    FROM tkblue_tklabel_dev_data.EmailContent ec JOIN
         tkblue_tklabel_dev_archdata.EmailTracking et
         ON et.id = ec.idEmailParam
    WHERE et.EmailDate < '2017-01-01' AND
          et.EmailDate >= '2016-01-01';

Я также ввел псевдонимы таблиц, которые облегчают написание и чтение запроса.Это также упрощает логику даты.

Это также меняет JOIN на внутреннее соединение - в любом случае это делает предложение WHERE.

Для предотвращения дублирования, вызванного JOIN, Я бы использовал EXISTS вместо:

INSERT INTO tkblue_tklabel_dev_archdata.EmailContent2016
    SELECT ec.*
    FROM tkblue_tklabel_dev_data.EmailContent ec
    WHERE EXISTS (SELECT 1           
                  FROM tkblue_tklabel_dev_archdata.EmailTracking et
                  WHERE et.id = ec.idEmailParam AND
                        et.EmailDate < '2017-01-01' AND
                        et.EmailDate >= '2016-01-01'
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...