Оператор вставки SQL с внутренним запросом не работает - PullRequest
0 голосов
/ 12 апреля 2019

Продолжение Руководство по плану разностных нагрузок таблицы AWS Redshift

Выбор, приведенный в следующем запросе, работает нормально и возвращает новые вставки в таблицу этапов:

SELECT A, B, C, D, E, F, G
      FROM TABLE_STAGE A
     WHERE NOT EXISTS (SELECT B.ID
                     FROM TABLE_FINAL B
                    WHERE B.B = A.B
                      AND B.C = A.C
                      AND B.D = A.D
                      AND B.E = A.E);

но когда я пытаюсь вставить их в финальную таблицу, используя приведенный ниже оператор, происходит сбой:

INSERT INTO TABLE_FINAL values
(SELECT A, B, C, D, E, F, G
  FROM TABLE_STAGE A
 WHERE NOT EXISTS (SELECT B.ID
                 FROM TABLE_FINAL B
                WHERE B.B = A.B
                  AND B.C = A.C
                  AND B.D = A.D
                  AND B.E = A.E));

Правильно ли выполнить запрос, чтобы получить только те строки, в которых составной ключ является новым и не 'не существует в финальной таблице.Каков наиболее эффективный способ сделать это, если это не правильное решение?Как это сделать?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

При выполнении вставки вы всегда должны включать список столбцов:

INSERT INTO TABLE_FINAL (A, B, C, D, E, F, G)
    SELECT A, B, C, D, E, F, G
    FROM TABLE_STAGE A
    WHERE NOT EXISTS (SELECT B.ID
                      FROM TABLE_FINAL B
                      WHERE B.B = A.B AND
                            B.C = A.C AND
                            B.D = A.D AND
                            B.E = A.E
                     );

Если это не удастся, то наиболее распространенной причиной будут несовместимые типы в столбцах.Также возможно, что вы не назначаете значение столбцу, объявленному как not null, который не имеет значения по умолчанию.

1 голос
/ 12 апреля 2019

попробуйте это:

INSERT INTO TABLE_FINAL 
SELECT A, B, C, D, E, F, G
  FROM TABLE_STAGE A
 WHERE NOT EXISTS (SELECT B.ID
                 FROM TABLE_FINAL B
                WHERE B.B = A.B
                  AND B.C = A.C
                  AND B.D = A.D
                  AND B.E = A.E);
...