2012-03-27 16 views
30

bisogno di aiuto sintassi SQL :-)Query di aggiornamento con INNER JOIN tra le tabelle in 2 diversi database sul server di 1

Entrambi i database sono sullo stesso server

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 

posso fare una query in Access con tabelle collegate con sintassi simile - MA a SQL non piace.

Sono sicuro che è un problema di semplice :-D

Grazie!

risposta

69

Si potrebbe chiamare solo stile, ma preferisco l'aliasing per migliorare la leggibilità.

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

Questo non sembra funzionare su MySQL. La sintassi corretta sarebbe 'UPDATE DHE.dbo.tblAccounts A INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink RA ON A.AccountCode = RA.AccountCode SET ControllingSalesRep = RA.SalesRepCode'. – user1111929

+0

Esatto ... la risposta sopra (proposta da @jerry) non funziona per mysql. – htobon

+0

grazie mille –

1

dovrebbe essere simile a questo: tavolo

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 

aggiornamento si ripete nella clausola FROM.

4

spiacenti suo ritardo, ma credo che sarebbe di aiuto a coloro che sbarcano qui trovare una soluzione al problema simile. La clausola impostata dovrebbe venire subito dopo la clausola di aggiornamento. Quindi riorganizzare la tua query con un po 'di cambiamento fa il lavoro.

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 
+1

mi ha aiutato. Grazie. –

1

Viene spiegato qui http://erabhinavrana.blogspot.in/2014/01/how-to-execute-update-query-by-applying.html

Essa ha anche altri frammenti di codice utili che sono comunemente usati.

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> 

Sostituire i dati in <> con i valori appropriati.

Questo è tutto. fonte:

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

+0

Dovresti incollare un riepilogo del link fornito nel tuo post per impedire il deadlinking – foibs

1

che può essere utile

Update 
    A INNER JOIN B ON A.COL1=B.COL3 
SET 
    A.COL2='CHANGED', A.COL4=B.COL4,...... 
WHERE ....; 
0
//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
Update one table using Inner Join 

    UPDATE Table1 SET name=ml.name 
FROM table1 t inner JOIN 
Table2 ml ON t.ID= ml.ID 
3
UPDATE table1 a 
inner join table2 b on (a.kol1=a.b.kol1...) 
SET a.kol1=b.kol1 
WHERE 
a.kol1='' ... 

per me fino a quando la sintassi lavorato -MySQL

Problemi correlati