Como faço para combinar três campos de duas mesas para atualizar as mesmas tabelas em caso de partida
Pergunta
Dadas duas tabelas A e B em um banco de dados MySQL, como se pode atualizar um campo em uma linha da Tabela A se e somente se certos campos na linha mencionada pela tabela A exatamente campos de correspondência em uma linha distinta da Tabela B. A As linhas na Tabela B devem ser usadas uma vez e apenas uma vez para cada comparação. Como tal, uma linha na Tabela B que possui campos correspondentes a uma linha na Tabela A não pode ser usada um ganho para corresponder a qualquer outra linha na Tabela A.
eu tentei
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
Infelizmente, isso não fornece meus resultados desejados, pois diferentes linhas da Tabela A tendem a ser combinadas com a mesma linha na Tabela B.
Por exemplo: Tabela 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
Tabela 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
Para combinar usando a referência, quantidade e data.
Solução
Poderia ser tão simples quanto adicionar exclusões à cláusula WHERE para evitar a reutilização?
AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'
Isso funcionará se cada linha for atualizada por sua vez, mas não se for definida e transacional. Minhas desculpas por não testar isso; Não tenho mysql aqui para tentar isso.
Outras dicas
Adicione mais condições à sua cláusula WHERE para forçar uma correspondência de 1: 1 entre os registros em tablea e Tableb?