问题
表格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行都应更新
(因此,表01中的值对于键01和键02的datacolumn1分别为0.15和1.2(对于datacolumn2))
到目前为止我尝试过的是:
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;
问题:
和错误:
消息102,级别15,状态1,行1’a’附近的语法不正确。消息102,级别15,状态1,第12行’d’附近的语法不正确。
您的查询将给出错误
Msg 8156, Level 16, State 1, Line 59
The column 'AnotherKey' was specified multiple times for 'tmpTable'.
那是因为你正在使用*
的使用条款中,并AnotherKey
为双方的部分table2
和table3
。
指定所需的列。另外,因为keycolumn
在on
子句中使用,所以在其中没有外部联接也是没有用的。
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, State 1, Line 1 Incorrect syntax near 'a'. Msg 102, Level 15, State 1, Line 12 Incorrect syntax near 'd'.
看起来您使用的是SQL Server2005。可以从SQL Server 2008中进行合并。
您可以使用来检查您的SQL Server版本select @@version
。
问题内容: 我必须使用和在单个查询中。对于该SQL具有语句。 MySQL中是否支持该语句。如果支持,请提供样本。 问题答案: MySQL不支持,但是,还有其他可能的方法可以做到这一点: 插入…在重复密钥更新上 如果您在INSERT语句中指定ON DUPLICATE KEY UPDATE选项,并且新行在UNIQUE或PRIMARY KEY索引中导致重复值,则MySQL将基于新值对旧行进行更新。
问题内容: 我有一个合并语句,该语句应始终更新或插入单个记录。我想记住该语句在变量中的ID。看起来像这样: 现在这不起作用,因为您不能以这种方式在输出子句中设置@int。我知道我可以创建一个模板并在输出中使用 INTO @temptable 。但是由于我 知道 它始终是一条记录,因此我希望将ID包含在INT变量中。这有可能吗?还是我被迫使用表变量。我希望我只是缺少一些语法。 问题答案: 不,您必须
问题内容: 我有一个在MySQL中运行良好的查询,但是在Oracle上运行该查询时,出现以下错误: SQL错误:ORA-00933:SQL命令未正确终止 00933。00000-“ SQL命令未正确终止” 查询是: 问题答案: 该语法在Oracle中无效。你可以这样做: 或者您 可以 执行以下操作: 它取决于内联视图是否被Oracle更新( 要更新第二条语句取决于 此处 列出的一些规则 )。
我在试着做一个合并语句。我试图用节点id获取节点,但合并不允许我使用'where id(node)=nodeid'。 类似于:
问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助。 7年前关闭。 这行不通吗?还是我做错了?尝试了多种形式,似乎找不到关于该主题的任何可靠信息。有任何想法吗? 问题答案: 如果是一个自我陈述。这就像一个完整的声明。因此,不能在字符串左右连接之间使用它。更好的解决方案是使
问题内容: 我想从一个名为Sorels的表更新一个名为的表。它们之间的链接是的等于Sorels表的。这是我对Merge语句的第一次尝试,并且我正在尝试学习语法。 运行此命令时,出现以下错误: 错误10/22/2009 1:38:51 PM 0:00:00.000 SQL Server数据库错误:关键字’ON’附近的语法不正确。46 0 添加的信息* 在建议了第一个修复程序之后,代码如下: 现在我得