67 votes

Mettre à jour la requête avec INNER JOIN entre les tables de 2 bases de données différentes sur 1 serveur

Besoin d'aide sur la syntaxe SQL :-)

Les deux bases de données sont sur le même serveur

 db1 = DHE
db2 = DHE_Import

UPDATE DHE.dbo.tblAccounts 
INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink 
    ON DHE.dbo.tblAccounts.AccountCode = DHE_Import.tblSalesRepsAccountsLink.AccountCode 
SET DHE.dbo.tblAccounts.ControllingSalesRep = DHE_Import.dbo.tblSalesRepsAccountsLink.SalesRepCode

Je peux faire une requête dans Access avec des tables liées avec une syntaxe similaire - MAIS SQL ne l'aime pas.

Je suis sûr que c'est un problème simple :-D

Merci!

145voto

jerry Points 532

Vous pourriez l'appeler simplement style, mais je préfère créer des alias pour améliorer la lisibilité.

 UPDATE A    
  SET ControllingSalesRep = RA.SalesRepCode   
from DHE.dbo.tblAccounts A
  INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink RA
    ON A.AccountCode = RA.AccountCode

Pour MySQL

 UPDATE DHE.dbo.tblAccounts A 
  INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink RA 
      ON A.AccountCode = RA.AccountCode 
SET A.ControllingSalesRep = RA.SalesRepCode

35voto

ram Points 1193

Voici la syntaxe MySQL :

 UPDATE table1 
INNER JOIN table2 ON table1.field1 = table2.field2
SET table1.field3 = table2.field4 
WHERE ...... ;

http://geekswithblogs.net/faizanahmad/archive/2009/01/05/join-in-sql-update--statement.aspx

6voto

Ali Shah Ahmed Points 1247

Désolé il est tard, mais je suppose que cela aiderait ceux qui atterrissent ici à trouver une solution à un problème similaire. La clause set doit venir juste après la clause update. Donc, réorganiser votre requête avec un peu de changement fait le travail.

 UPDATE DHE.dbo.tblAccounts 
SET DHE.dbo.tblAccounts.ControllingSalesRep
    = DHE_Import.dbo.tblSalesRepsAccountsLink.SalesRepCode
from DHE.dbo.tblAccounts 
INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink 
    ON DHE.dbo.tblAccounts.AccountCode
        = DHE_Import.tblSalesRepsAccountsLink.AccountCode 

4voto

Sandra Points 51
UPDATE table1 a
 inner join  table2 b on (a.kol1=a.b.kol1...)
SET a.kol1=b.kol1
WHERE 
a.kol1='' ...

pour moi jusqu'à ce que la syntaxe fonctionne -MySQL

4voto

Nikola Markovinović Points 12039

Devrait ressembler à ceci :

 UPDATE DHE.dbo.tblAccounts
   SET DHE.dbo.tblAccounts.ControllingSalesRep = 
       DHE_Import.dbo.tblSalesRepsAccountsLink.SalesRepCode
  from DHE.dbo.tblAccounts 
     INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink 
        ON DHE.dbo.tblAccounts.AccountCode =
           DHE_Import.tblSalesRepsAccountsLink.AccountCode 

La table de mise à jour est répétée dans la clause FROM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X