给定两个表A和B中MySQL数据库,一个如何在表A中的一行更新字段当且仅当在表中的前面提到行中的某些字段甲恰好在表中的一个不同的行匹配字段B.表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 

要符合使用参考,金额和日期。

有帮助吗?

解决方案

莫非作为添加排除WHERE子句,以避免回用作为简单?

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

如果各行依次更新,但如果它是基于集和事务性这将工作。我不测试这个道歉;我没有的MySQL这里来试试这个。

其他提示

添加更多的条件,你的WHERE子句来强制执行1:记录之间的1场在表A和tableB的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top