【问题标题】:Update Query with INNER JOIN between tables in 2 different databases on 1 server在 1 个服务器上的 2 个不同数据库中的表之间使用 INNER JOIN 更新查询
【发布时间】:2012-04-11 06:26:48
【问题描述】:

需要一些 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

谢谢!

【问题讨论】:

    标签: sql-server database syntax inner-join


    【解决方案1】:

    你可以称之为样式,但我更喜欢使用别名来提高可读性。

    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
    

    【讨论】:

    • 这似乎不适用于 MySQL。正确的语法应该是UPDATE DHE.dbo.tblAccounts A INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink RA ON A.AccountCode = RA.AccountCode SET ControllingSalesRep = RA.SalesRepCode
    • 没错...上面的答案(由@jerry 提出)不适用于mysql。
    • 就我个人而言,除非有必要,否则我不喜欢使用别名,例如涉及大量字段或表时等。但是为了清晰起见,我仍然使用 tablename.fieldname 限定每个字段别名
    【解决方案2】:

    以下是 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

    【讨论】:

      【解决方案3】:

      抱歉,来晚了,但我想这对那些来到这里寻找类似问题解决方案的人会有所帮助。 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】:
        UPDATE table1 a
         inner join  table2 b on (a.kol1=a.b.kol1...)
        SET a.kol1=b.kol1
        WHERE 
        a.kol1='' ...
        

        对我来说,直到语法有效 -MySQL

        【讨论】:

          【解决方案5】:

          应该是这样的:

          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 子句中重复。

          【讨论】:

            【解决方案6】:

            这可能有用

            Update
                A INNER JOIN B ON A.COL1=B.COL3
            SET
                A.COL2='CHANGED', A.COL4=B.COL4,......
            WHERE ....;
            

            【讨论】:

              【解决方案7】:

              在 SQL 中使用 Inner join 查询更新非常简单。无需 使用 FROM 子句即可。这是一个例子:

                  UPDATE customer_table c 
              
                    INNER JOIN  
                        employee_table e
                        ON (c.city_id = e.city_id)  
              
                  SET c.active = "Yes"
              
                  WHERE c.city = "New york";
              

              【讨论】:

                【解决方案8】:

                这里解释http://erabhinavrana.blogspot.in/2014/01/how-to-execute-update-query-by-applying.html

                还有其他常用的sn-ps有用代码。

                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>
                

                &lt;&gt; 中的数据替换为适当的值。

                就是这样。 来源:

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

                【讨论】:

                • 您应该在帖子中粘贴所提供链接的摘要,以防止死链接
                【解决方案9】:
                //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 = '')
                

                【讨论】:

                  【解决方案10】:
                  Update one table using Inner Join
                  
                    UPDATE Table1 SET name=ml.name
                  FROM table1 t inner JOIN
                  Table2 ml ON t.ID= ml.ID  
                  

                  【讨论】:

                    【解决方案11】:

                    非常适合我。

                    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;
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2013-12-05
                      • 2010-09-06
                      • 2011-09-15
                      • 1970-01-01
                      • 2015-05-13
                      • 2016-10-14
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多