子查询有太多列

时间:2015-06-12 08:15:00

标签: sql postgresql

我有两张结构相同的表:tmp_grngrn 我必须删除表tmp_grn中已存在的表grn中的行 问题是我没有唯一或主键,但我可以通过两列的组合确定一个唯一的行。我们假设列名为grn_codeitem_skucode

我的查询:

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

我收到此错误:

  

错误:子查询有太多列

这样做的正确方法是什么?

3 个答案:

答案 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