根据第二个表中的唯一组合删除

时间:2015-12-03 19:20:59

标签: sql tsql

我有发票标题(发票)表和发票明细(invdet)表。发票有inv_co和inv_no,invdet有invd_inv_co和invd_inv_no,如:

invoice table       invdet table
-----------------   ---------------------------------------
inv_co | inv_no     invd_inv_co | invd_inv_no | invd_seq_no
C01    | 129324     C01         | 129324      | 1
                    C01         | 129324      | 2
                    C01         | 129324      | 3
                    C01         | 129324      | 4
                    C01         | 129324      | 5
                    C03         | 129325      | 1
                    C03         | 129325      | 2
                    C03         | 129325      | 3
                    C03         | 129325      | 4

所以我需要根据发票头表中inv_co和inv_no的唯一组合选择invdet中的行(基本上对于指定的inv_co和inv_no我也想要相应的详细行)。

我需要在invdet表上执行删除操作,目前我正在使用游标并从游标中选择inv_co和inv_no并基于此进行删除但我希望有人知道我可以删除的方法在一个查询中。

希望我能够很好地解释并提前感谢!

凯文

2 个答案:

答案 0 :(得分:1)

如果您要从[ C01 | 129324 ]表中删除invdet而不是从invoice表中删除,则不需要使用游标,因为您可以这样做:< / p>

DELETE FROM invdet WHERE invd_inv_co = 'C01' AND invd_inv_no = 129324

如果要删除invdetinvoice内匹配记录的所有记录:

DELETE invdet
  FROM invdet INNER JOIN invoice
  ON (invd_inv_co = inv_co AND invd_inv_no = inv_no)

答案 1 :(得分:0)

如果要删除表invdetinv_coinv_no列中的值存在于表invoice中的记录,只需使用以下查询。

DELETE inv
FROM invdet inv
WHERE exists 
    (
        SELECT
            * 
        FROM invoice i 
        WHERE i.inv_co = inv.invd_inv_co 
            AND i.inv_no = invd_inv_no
    ) 

希望这有帮助!