web-dev-qa-db-fra.com

Requête de mise à jour avec INNER JOIN entre des tables de 2 bases de données différentes sur un serveur

Besoin d'aide avec 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 ayant une syntaxe similaire - MAIS SQL ne l'aime pas.

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

Merci!

41
Charlez

Vous pouvez appeler cela simplement du style, mais je préfère le crénelage 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
89
jerry

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

26
ram

Désolé, c'est tard, mais je suppose que cela aiderait ceux qui débarquent ici à trouver une solution à un problème similaire. La clause set devrait 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 
5
Ali Shah Ahmed
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 a fonctionné -MySQL

4
Sandra

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.

2

qui peut être utile

Update
    A INNER JOIN B ON A.COL1=B.COL3
SET
    A.COL2='CHANGED', A.COL4=B.COL4,......
WHERE ....;
1
Mahendra Jella
//For Access Database:
UPDATE ((tblEmployee
LEFT JOIN tblCity ON (tblEmployee.CityCode = tblCity.CityCode))
LEFT JOIN tblCountry ON (tblEmployee.CountryCode = tblCountryCode))
SET tblEmployee.CityName = tblCity.CityName, 
tblEmployee.CountryName = tblCountry.CountryName
WHERE (tblEmployee.CityName = '' OR tblEmployee.CountryName = '')
0

C'est expliqué ici http://erabhinavrana.blogspot.fr/14/01/how-to-execute-update-query-by-applying.html

Il contient également d’autres extraits de code utiles, couramment utilisés.

update <dbname of 1st table>.<table name of 1st table> A INNER JOIN <dbname of 2nd table>.<table name of 2nd table> RA ON A.<field name of table 1>=RA.<field name of table 2> SET A.<field name of table 1 to be updated>=RA.<field name of table 2 to set value in table 1>

Remplacez les données dans <> par vos valeurs appropriées.

C'est ça .source: 

http://www.dynamic-coders.com/how-to-update-two-different-tables-in-different-databases-on-same-server

0
abhinav
Update one table using Inner Join

  UPDATE Table1 SET name=ml.name
FROM table1 t inner JOIN
Table2 ml ON t.ID= ml.ID  
0
kavitha Reddy