Comment puis-je faire correspondre trois champs de deux tables afin de mettre à jour les mêmes tables en cas de correspondance

StackOverflow https://stackoverflow.com/questions/1755754

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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top