【问题标题】:Getting Error in query查询中出现错误
【发布时间】:2009-10-12 04:31:20
【问题描述】:

update tablename set (col1,col2,col3) = (select col1,col2,col3 from tableName2 order by tablenmae2.col4) 返回错误 失踪 )。如果我删除 order by 子句,查询工作正常

【问题讨论】:

    标签: oracle


    【解决方案1】:

    在 UPDATE 的子查询中不允许使用 ORDER BY。所以你得到错误“Missing )”,因为解析器期望子查询在你有 ORDER BY 的地方结束。

    【讨论】:

    • 是的,我知道在更新查询中不使用 order by 子句,但是在这里我在 select 查询中使用 ordrt by 子句。
    【解决方案2】:

    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 中有行而 TableName2 中没有匹配条目,则将 Col1、Col2 和 Col3 中的值替换为空值。

    一些 DBMS 还支持更新连接表示法以减少这种表示法的可怕性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2011-07-28
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      相关资源
      最近更新 更多