我有两张结构相同的表: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);
我收到此错误:
错误:子查询有太多列
这样做的正确方法是什么?
答案 0 :(得分:4)
如果要组合两列,则需要将它们放入括号中:
DELETE FROM tmp_grn
WHERE (grn_code, item_skucode) IN (SELECT grn_code, item_skucode
FROM grn);
但是suslov使用exists
的答案很可能更快 - 您需要检查执行计划以验证。
答案 1 :(得分:1)
您可以使用exists
(,如果您想检查这对值):
delete from tmp_grn t
where exists ( select *
from grn
where grn_code = t.grn_code
and item_skucode = t.item_skucode);
答案 2 :(得分:0)
delete * from tmp_grn intersect select * from grn