J'ai une instruction select qui joint deux tables et récupère des informations. Je voudrais mettre à jour tous les enregistrements sur l'un de ces tableaux (trouvés dans le select) avec des informations contenues dans le select. Le select ressemble à ceci:SQL - Comment effectuer une mise à jour par lots compte tenu des résultats d'une sélection
SELECT account.id
document.id
FROM customer INNER JOIN account ON
(customer.firstname = account.firstname AND
customer.lastname = account.lastname AND
customer.phone = account.phone)
INNER JOIN document ON
customer.id = document.customerid
WHERE document.accountid IS NULL;
En anglais, un document peut appartenir aux clients et aux comptes. Je recherche les enregistrements de compte qui correspondent aux enregistrements clients dans lesquels le document appartient au client, mais pas le compte.
Maintenant, je peux manuellement passer par les résultats et exécuter ceci:
UPDATE document
SET accountid = /*account.id*/
WHERE id = /*document.id*/;
qui fonctionne comme je le voudrais, mais il y a une bonne quantité de documents qui correspondent à ma requête et je voudrais le faire dans une seule déclaration si je pouvais.
+1 J'écrivais une solution similaire acheter vous étiez plus rapide! :) –
intéressant. J'ai essayé ceci dans un jeu de données de test (copie de réel) et il a produit plus de mises à jour que des rangées dans la requête originale. Je vais devoir y regarder de plus près. –
Probablement en raison de la première jointure. –