Обновить запрос с INNER JOIN между таблицами в 2 разных базах данных на 1 сервере - PullRequest
46 голосов
/ 27 марта 2012

Нужна помощь по синтаксису SQL: -)

Обе базы данных находятся на одном сервере

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

Я могу сделать запрос в Access со связанными таблицами с похожим синтаксисом, НО SQL не нравится.

Я уверен, что это простая проблема: -D

Спасибо!

Ответы [ 10 ]

97 голосов
/ 27 марта 2012

Вы можете назвать это просто стилем, но я предпочитаю создавать псевдонимы для улучшения читабельности.

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

Для MySQL

UPDATE DHE.dbo.tblAccounts A 
  INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink RA 
      ON A.AccountCode = RA.AccountCode 
SET A.ControllingSalesRep = RA.SalesRepCode
27 голосов
/ 10 февраля 2014

Ниже приведен синтаксис 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

5 голосов
/ 19 декабря 2012

Извините, что поздно, но я думаю, что это поможет тем, кто приземлится здесь, найти решение подобной проблемы. Предложение set должно следовать сразу после предложения update. Так что перестановка вашего запроса с небольшим изменением делает свою работу.

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 
4 голосов
/ 10 декабря 2015
UPDATE table1 a
 inner join  table2 b on (a.kol1=a.b.kol1...)
SET a.kol1=b.kol1
WHERE 
a.kol1='' ...

для меня, пока не сработал синтаксис -MySQL

3 голосов
/ 27 марта 2012

Должно выглядеть так:

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 

Таблица обновления повторяется в предложении FROM.

1 голос
/ 28 апреля 2014

что может быть полезно

Update
    A INNER JOIN B ON A.COL1=B.COL3
SET
    A.COL2='CHANGED', A.COL4=B.COL4,......
WHERE ....;
0 голосов
/ 19 марта 2019

отлично сработало для меня.

UPDATE TABLE_A a INNER JOIN TABLE_B b ON a.col1 = b.col2 SET a.col_which_you_want_update = b.col_from_which_you_update;
0 голосов
/ 03 декабря 2015
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 голосов
/ 29 августа 2015
//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 голосов
/ 09 января 2014

Это объясняется здесь http://erabhinavrana.blogspot.in/2014/01/how-to-execute-update-query-by-applying.html

Он также имеет другие полезные фрагменты кода, которые обычно используются.

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>

Заменить данные в <> соответствующими значениями.

Вот и все. источник:

http://www.dynamic -coders.com / как к обновлению-два-разные столы-в-разных-баз-на-же-сервер

...