加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 在merge语句中使用join

发布时间:2020-12-12 16:48:08 所属栏目:MsSql教程 来源:网络整理
导读:问题 表格1: | KeyColumn | DataColumn1 | DataColumn2| 01 0.1 0.2 02 0.13 0.41 表2: | anotherKey | DataColumn1 | DataColumn2| A1 .15 1.2 A2 .25 23.1 表3: |KeyColumn| anotherKey | 01 A1 02 A1 给定一个键(A1或A2),我需要用表2中的相应值来更新表
问题

表格1:

| KeyColumn | DataColumn1 | DataColumn2|  
   01         0.1          0.2
   02         0.13         0.41

表2:

| anotherKey | DataColumn1 | DataColumn2|      
   A1          .15          1.2
   A2          .25          23.1

表3:

|KeyColumn| anotherKey |       
  01        A1
  02        A1

给定一个键(A1或A2),我需要用表2中的相应值来更新表1中的DataColumn1和DataColumn2列.

所以table1可以更新X行数,如上面的数据所示.如果要更新A1,则应更新01和02行

(因此,对于datacolumn1,表1中的值为0.15,对于01和02键,datacolumn2的值为1.2)

到目前为止我已经尝试过

MERGE table1
USING (SELECT *
       FROM table2
       LEFT OUTER JOIN table3
           on table2.anotherKey = table3.anotherKey
       WHERE table2.anotherKey = 'A1') tmpTable
ON 
   table1.keyColumn = tmpTable.keyColumn
WHEN MATCHED THEN
       UPDATE
       SET table1.DataColumn1 = tmpTable.DataColumn1,table1.DataColumn2 = tmpTable.DataColumn2;

问题:

这是否允许?要在using语句中使用select?我在第1行出现语法错误
有没有更好的办法呢?我做这个比它要复杂吗?
>我做错了什么?

和错误:

消息102,第15级,状态1,第1行
‘a’附近的语法不正确.
消息102,第12行
‘d’附近的语法不正确.

解决方法

您的查询将给出错误
Msg 8156,Level 16,State 1,Line 59
The column 'AnotherKey' was specified multiple times for 'tmpTable'.

那是因为你在using子句中使用*,AnotherKey是table2和table3的一部分.
指定您需要的列.因为在onclause中使用keycolumn,所以没有任何外部连接.

MERGE table1
USING (SELECT table3.keycolumn,table2.DataColumn1,table2.DataColumn2
       FROM table2
       INNER JOIN table3
           ON table2.anotherKey = table3.anotherKey
       WHERE table2.anotherKey = 'A1') tmpTable
ON 
   table1.keyColumn = tmpTable.keyColumn
WHEN MATCHED THEN
       UPDATE
       SET table1.DataColumn1 = tmpTable.DataColumn1,table1.DataColumn2 = tmpTable.DataColumn2;

更新

发布实际错误总是有帮助的.

Msg 102,Level 15,Line 1 Incorrect syntax near 'a'. Msg 102,Line 12 Incorrect syntax near 'd'.

看起来你在SQL Server 2005上.合并从SQL Server 2008可以.

您可以使用select @@版本检查您的SQL Server版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读