更新同一表中的唯一匹配记录

时间:2017-01-13 19:06:04

标签: mysql

我有一个交易数据库表。由于代码中出现了一些侥幸,在许多情况下,同一数量的正交易和负交易都在同一张发票上进行。有一个名为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

1 个答案:

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