【问题标题】:update with join sql | error: ORA-00933: SQL command not properly ended使用连接 sql 更新 |错误:ORA-00933:SQL 命令未正确结束
【发布时间】:2021-03-16 12:21:08
【问题描述】:

对于容量超过 200 件的每件商品,我必须使用 id 必须相同且我无法传递此错误的两个表将价格降低 2%:ORA-00933:SQL 命令不正确结束了

'Catalog' 是一个表,'Order' 是第二个表

update Catalog
set price = (price - price*0.02) from Catalog inner join Order on 
(Catalog.idf = Order.idf and Catalog.idp = Order.idp)
where quantity > 200;

这可能是什么错误?谢谢!

【问题讨论】:

  • 请提供样本数据和期望的结果。目前尚不清楚哪些表中有哪些列。

标签: sql oracle sql-update update-inner-join


【解决方案1】:

Oracle 不支持UPDATE 中的FROM 子句。

嗯。如果我推测quantityorder中,那么你可以使用:

update Catalog
    set price = 0.98 * price
    where (select o.quantity
           from Orders o 
           where Catalog.idf = Order.idf and Catalog.idp = Order.idp
          ) > 200;

我对此有点谨慎。这意味着orderscatalog 之间存在一对一的关系。如果一个目录条目可以有多个order,那么您可能需要聚合。但是,这似乎是您试图在问题中实现的逻辑。

【讨论】:

    【解决方案2】:

    你也可以使用merge声明如下:

    Merge into Catalog c
    Using (select * from orders) O
    On (c.idf = O.idf and C.idp = O.idp
        And o.quantity > 200)
    When matched then
    Update set c.price = 0.98 * price;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多