在查询中获取错误

时间:2009-10-12 04:31:21

标签: oracle

更新tablename set(col1,col2,col3)=(按tablenmae2.col4从tableName2顺序选择col1,col2,col3)返回错误 失踪 )。如果我删除order by子句

,查询工作正常

2 个答案:

答案 0 :(得分:2)

UPDATE中的子查询中不允许使用ORDER BY。因此,您会收到错误“Missing”,因为解析器期望子查询在您拥有ORDER BY的位置结束。

答案 1 :(得分:0)

ORDER BY打算做什么?

你可能想到的是:

UPDATE TableName
   SET (Col1, Col2, Col3) = (SELECT T2.Col1, T2.Col2, T2.Col3
                               FROM TableName2 AS T2
                              WHERE TableName.Col4 = T2.Col4
                            )
 WHERE EXISTS(SELECT * FROM TableName2 AS T2 WHERE TableName.Col4 = T2.Col4);

这种笨拙的操作:

  1. 从TableName2中获取与Col4中的值匹配TableName的行,并使用相应列中的值更新TableName。
  2. 确保只更改TableName中具有TableName2中相应行的行;如果从UPDATE中删除WHERE子句,则在TableName中没有匹配条目的情况下,如果TableName中存在行,则将Col1,Col2和Col3中的值替换为空值。
  3. 某些DBMS还支持更新连接表示法,以减少此表示法的可怕性。