我有发票标题(发票)表和发票明细(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并基于此进行删除但我希望有人知道我可以删除的方法在一个查询中。
希望我能够很好地解释并提前感谢!
凯文
答案 0 :(得分:1)
如果您要从[ C01 | 129324 ]
表中删除invdet
而不是从invoice
表中删除,则不需要使用游标,因为您可以这样做:< / p>
DELETE FROM invdet WHERE invd_inv_co = 'C01' AND invd_inv_no = 129324
如果要删除invdet
中invoice
内匹配记录的所有记录:
DELETE invdet
FROM invdet INNER JOIN invoice
ON (invd_inv_co = inv_co AND invd_inv_no = inv_no)
答案 1 :(得分:0)
如果要删除表invdet
中inv_co
和inv_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
)
希望这有帮助!