web-dev-qa-db-fra.com

Table de mise à jour MySQL basée sur une autre valeur de table

J'ai deux tables,

Voici ma première table,

ID      SUBST_ID        CREATED_ID
1       031938          TEST123
2       930111          COOL123
3       000391          THIS109
4       039301          BRO1011
5       123456          COOL938
...     ...             ...

Ceci est ma deuxième table,

ID      SERIAL_ID       BRANCH_ID
1       039301          NULL
2       000391          NULL
3       123456          NULL
...     ...             ...

J'ai besoin de savoir comment mettre à jour toutes les lignes de ma deuxième table en utilisant les données de ma première table.

Il faudrait faire tout cela en une seule requête de mise à jour.

SUBST_ID et SERIAL_ID concordent, il doit donc récupérer l'identificateur created_id de la première table et l'insérer dans la seconde.

Donc, la deuxième table deviendrait la suivante,

ID      SERIAL_ID       BRANCH_ID
1       039301          BRO1011
2       000391          THIS109
3       123456          COOL938
...     ...             ...

Merci pour votre aide et vos conseils.

49
verheesj
UPDATE TABLE2
       JOIN TABLE1
       ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
105
Tom

En plus de la réponse de Tom si vous devez répétez l'opération fréquemment et souhaitez gagnez du temps vous pouvez le faire:

UPDATE TABLE1
       JOIN TABLE2
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID
WHERE TABLE2.BRANCH_ID IS NULL
15
RafaSashi

Je pense que cela devrait fonctionner

UPDATE secondTable
JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID
SET BRANCH_ID = CREATED_ID
3
Gonzalo.-
UPDATE TABLE2
       JOIN TABLE1
       ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID='';
2
Mohammad Imran

Utiliser INNER JOIN:

UPDATE TABLE1
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID;

Une autre solution, comme ci-dessous: J'utilise ici la clause WHERE au lieu de JOIN

UPDATE 
    TABLE1,
    TABLE2
WHERE
    TABLE1.SUBST_ID = TABLE2.SERIAL_ID
SET 
    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
0
Faisal

Vous pouvez aussi utiliser ceci:

update TABLE1 set BRANCH_ID = ( select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID)

mais avec mon expérience, je peux dire que cette voie est si lente et que je ne la recommande pas!

0
Abadis