【问题标题】:Oracle Update query with join带连接的 Oracle 更新查询
【发布时间】:2014-03-30 14:09:23
【问题描述】:

有两张桌子。第一个是expenses,第二个是expenses_items

费用表中有 2 列分别为 expns_idexpns_job_type

expenses_items 表中有 2 列,分别为 expns_id(费用表中的外键)和 group

我需要更新expenses_items 表中的group 并将其值设置为development,其中expenses 表中expns_job_type 的值类似于new building

我已尝试以下查询。但没用。

update expenses_items
set expenses_items."group" = 'development'
 join expenses ON 
 expenses_items.expns_id = expenses.expns_id 
where expenses.expns_job_type like 'new building'

我该怎么做?

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    您可以在 where 子句中使用子查询来限制您的更新请求:

    UPDATE expenses_items ei SET
      group = 'dvelopment'
    WHERE EXISTS(
      SELECT expns_id FROM expenses e
      WHERE e.expns_id = ei.expns.id
        AND expns_job_type LIKE 'new building'
    )
    

    它也可能是错字,但是您使用LIKE 子句而不使用通配符。如果您需要完全匹配 - 使用 = 而不是 LIKE

    【讨论】:

      【解决方案2】:

      Oracle 使用与 SQL Server 支持不同的 UPDATE 语法。有关 UPDATE 和 MERGE 语句,请参阅 Oracle 文档:

      http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10007.htm

      http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm#i2081218

      你的情况应该是这样的

      update expenses_items
      set expenses_items."group" = 'development'
      where exists (select * from expenses
      where expenses_items.expns_id = expenses.expns_id 
      and expenses.expns_job_type like 'new building'
      )
      

      merge into expenses_items using 
      (
       select expenses.expns_id
       from expenses 
       where expenses.expns_job_type like 'new building'
      ) src on (expenses_items.expns_id = src.expns_id)
      when matched then 
        update set expenses_items."group" = 'development'
      

      【讨论】:

        【解决方案3】:

        Oracle 不支持“使用联接更新”语法。您可以改为执行以下操作:

        update expenses_items e
        set group = 'development'
        where exists 
        (
         select 1 
         from expenses 
         where expns_id = e.expns_id and expns_job_type like '%new building%'
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-04
          • 1970-01-01
          • 1970-01-01
          • 2018-03-31
          • 2020-11-29
          • 1970-01-01
          • 2019-05-01
          相关资源
          最近更新 更多