0

给定 MySQL 数据库中的两个表 A 和 B,当且仅当表 A 中上述行中的某些字段与表 B 中不同行中的字段完全匹配时,如何更新表 A 行中的字段。表 B 中的行必须使用一次,并且每次比较只能使用一次。因此,表 B 中具有与表 A 中的行匹配的字段的行不能用于匹配表 A 中的任何其他行。

我试过了

UPDATE
    Table A,
    Table B
SET 
    Table A.Status = 'MATCHED',
        Table B.Status = 'USED'
WHERE
    Table B.Status IS NULL
AND 
    Table A.Field1 = Table B.Field1
AND 
    Table A.Field2 = Table B.Field2

不幸的是,这并没有给出我想要的结果,因为表 A 中的不同行往往会与表 B 中的同一行匹配。

例如:表 A

ID  Date       Ref    Amount  Status 
1   2009-10-20 773    300000         
2   2009-10-20 773    10000   MATCHED
3   2009-10-20 773    150000         
4   2009-10-20 773    20000   MATCHED
5   2009-10-20 773    140000  MATCHED

表 B

 Ref Amount Date       ID
 870 50000  2009-11-01 1 
 871 50000  2009-11-01 2 
 871 80000  2009-11-01 3 
 871 20000  2009-11-01 4 
 871 20000  2009-11-01 5 
 871 20000  2009-11-01 6 
 872 300000 2009-11-01 7 

使用 Ref、Amount 和 Date 进行匹配。

4

2 回答 2

1

向 WHERE 子句添加更多条件以强制 tableA 和 tableB 中的记录之间进行 1:1 匹配?

于 2009-11-18T13:25:36.430 回答
1

是否可以像在 WHERE 子句中添加排除项以避免重用一样简单?

AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'

如果每行依次更新,这将起作用,但如果它是基于设置和事务性的,则不会。我很抱歉没有对此进行测试;我这里没有 MySQL 可以尝试。

于 2010-01-02T09:22:53.620 回答