2015-06-12 3 views
0

У меня есть две таблицы с одинаковой структурой: tmp_grn и grn.
Мне нужно удалить строки из таблицы tmp_grn, которая уже существует в таблице grn.
Проблема в том, что у меня нет уникального или первичного ключа, но я могу определить уникальную строку с комбинацией из двух столбцов. Скажем, имена столбцов: grn_code и item_skucode.В подзапросе слишком много столбцов

Мой запрос:

DELETE FROM tmp_grn 
    WHERE grn_code AND item_skucode IN 
    (SELECT grn_code , item_skucode FROM grn); 

Я получаю эту ошибку:

ERROR: subquery has too many columns

Каким должен быть правильный способ сделать это?

ответ

4

Если вы хотите, чтобы объединить два столбца, вы должны поместить их в круглые скобки:

DELETE FROM tmp_grn 
    WHERE (grn_code, item_skucode) IN (SELECT grn_code, item_skucode 
            FROM grn); 

Но ответ Суслова, использующий exists, скорее всего, быстрее - вам нужно проверить план выполнения, чтобы убедиться в этом.

+1

wOw, я не знал о нескольких столбцах Спасибо –

1

Вы можете использовать exists (, если вы хотите, чтобы проверить пару значений):

delete from tmp_grn t 
where exists (select * 
       from grn 
       where grn_code = t.grn_code 
       and item_skucode = t.item_skucode); 
0
delete * from tmp_grn intersect select * from grn 
+0

Это не сработает –

Смежные вопросы