我有一个交易数据库表。由于代码中出现了一些侥幸,在许多情况下,同一数量的正交易和负交易都在同一张发票上进行。有一个名为void的软删除列。我想更新这个,以使匹配对无效。
基本上我想要的是:
UPDATE transactions pos JOIN transactions neg on pos.invoice_id = neg.invoice_id
AND pos.amount = neg.amount AND pos.effect = 1 AND neg.effect = -1
AND pos.void IS NULL AND neg.void IS NULL
SET pos.void = true, neg.void = true
虽然按原样运行,但不能唯一地识别对。因此,如果发票上有+ X,-X,+ X或-Y,+ Y,-Y,则会使所有内容无效。我本以为这是一个常见的问题,但我没有看到任何非常适合我的问题的答案。
类似问题的大部分答案都涉及使用子查询,但他们只是尝试更新1个条目,而不是2个条目,而且我不知道我在做什么时能够更新这两个条目这一点。
谢谢, -Eric
答案 0 :(得分:0)
也许如果你发布你的表结构我可以帮助你更好,但我认为这是你想要的:
UPDATE transactions
SET void = true
WHERE invoice_id in (
SELECT invoice_id from transactions as pos
JOIN transactions neg
ON pos.invoice_id = neg.invoice_id
AND pos.amount = neg.amount AND pos.effect = 1 AND neg.effect = -1
AND pos.void IS NULL AND neg.void IS NULL
)