ГДЕ с несколькими столбцами в Redshift - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Amazon Redshift, где у меня есть две таблицы.Промежуточная таблица, в которую я копирую все данные из S3, и целевая таблица, в которую все должно быть в конечном итоге вставлено.

Теперь у меня есть запрос, который должен удалить все из целевой таблицы, которая находится в промежуточной таблице, чтобы я выиграл 'не может иметь дубликатов.

DELETE FROM xschema.target
WHERE (col1, col2) IN 
(
SELECT col1, col2
FROM xschema.staging
)
AND col3 = 'de'
;

Запрос выполняется, но удаляет все, где col3 = 'de' имеет значение true.Условие IN оператора всегда возвращает true.

Например: если в моей целевой таблице есть следующие значения

col1 | col2 | col3 | col4
aaa  | 1    | de   | 100
bbb  | 2    | de   | 200
ccc  | 1    | us   | 180

И в моей промежуточной таблице следующие значения:

col1 | col2 | col3 | col4
aaa  | 1    | de   | 100
ddd  | 1    | de   | 250

И я запускаю запрос выше, чтобы удалить все значения в целевой таблице из промежуточной таблицы, которые я получаю:

col1 | col2 | col3 | col4
ccc  | 1    | us   | 180

, но я ожидаю:

col1 | col2 | col3 | col4
bbb  | 2    | de   | 200
ccc  | 1    | us   | 180

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

Редактировать: Добавлены примеры

1 Ответ

0 голосов
/ 19 сентября 2018

Я бы использовал EXISTS:

DELETE 
FROM xschema.target t
WHERE EXISTS (SELECT 1 FROM xschema.staging s WHERE s.col1 = t.col1 AND s.col2 = t.col2) AND
      col3 = 'de';
...