Comment puis-je faire correspondre trois champs de deux tables afin de mettre à jour les mêmes tables en cas de correspondance
Question
Compte tenu de deux tables A et B dans une base de données MySQL, comment peut-on mettre à jour un champ dans une ligne du tableau A si et seulement si certains champs de la ligne avant mentionnée dans le tableau A correspondent exactement les champs dans une ligne distincte de la table B. Les lignes du tableau B doit être utilisé qu'une seule fois et une seule fois pour chaque comparaison. En tant que tel, une rangée dans le tableau B, qui comporte des champs qui correspond à une rangée dans le tableau A ne peut pas être utilisé pour correspondre à un gain de l'une des lignes dans le tableau A.
J'ai essayé
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
Malheureusement, cela ne donne pas mes résultats souhaités puisque les différentes lignes du tableau A ont tendance à être jumelé avec la même ligne dans le tableau B.
Par exemple: Tableau 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
Tableau 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
Pour correspondre à l'utilisation Réf, montant et la date.
La solution
Pourrait-il être aussi simple que l'ajout d'exclusions à la clause WHERE pour éviter la réutilisation?
AND Table A.Status <> 'MATCHED'
AND Table B.Status <> 'USED'
Cela fonctionnera si chaque ligne est mis à jour à son tour, mais pas si elle est définie, en fonction et transactionnel. Mes excuses pour ne pas tester cela; Je n'ai pas MySQL ici pour essayer avec.
Autres conseils
Ajoutez d'autres conditions à votre clause WHERE pour forcer un 1: 1 correspondance entre enregistrements tableA et tableB