【问题标题】:How to update in db2 with join如何在 db2 中使用 join 进行更新
【发布时间】:2017-01-19 16:01:54
【问题描述】:

我想做一个更新,只更新受影响的值,但我的更新查询有一个连接,所以where exists 不起作用。

update semester_workload tA
set tA.account = (SELECT DISTINCT (t2.WORKING - t2.WORKLOAD) FROM SEMESTER_WORKLOAD t1
        join SEMESTER_WORKLOAD t2 on t1.ID_LECTURER = t2.ID_LECTURER
        WHERE t2.ACADEMIC_SEMESTER = 'WS10' AND tA.ID_SW = t2.ID_SW);
where exists (SELECT 1 FROM SEMESTER_WORKLOAD t1        
        join SEMESTER_WORKLOAD t2 on t1.ID_LECTURER = t2.ID_LECTURER
        WHERE t2.ACADEMIC_SEMESTER = 'WS10' AND tA.ID_SW = t2.ID_SW);

此代码不起作用,因为它显然无法识别 join 子句后的 where exists

【问题讨论】:

  • 不相关,但是:distinct 不是一个函数。括号没用

标签: sql database db2 sql-update


【解决方案1】:

只是一个简单的语法错误。 where exists 子句之前有一个多余的分号:

update semester_workload tA
set tA.account = (SELECT DISTINCT (t2.WORKING - t2.WORKLOAD) FROM SEMESTER_WORKLOAD t1
        join SEMESTER_WORKLOAD t2 on t1.ID_LECTURER = t2.ID_LECTURER
        WHERE t2.ACADEMIC_SEMESTER = 'WS10' AND tA.ID_SW = t2.ID_SW) -- ; remove this
where exists (SELECT 1 FROM SEMESTER_WORKLOAD t1        
        join SEMESTER_WORKLOAD t2 on t1.ID_LECTURER = t2.ID_LECTURER
        WHERE t2.ACADEMIC_SEMESTER = 'WS10' AND tA.ID_SW = t2.ID_SW);

【讨论】:

    【解决方案2】:

    你有一个“;”过量。请注意,您不需要加入同一个表三次,您可以这样做:

    UPDATE SEMESTER_WORKLOAD t1
    set t1.account = 
    (
       SELECT t2.WORKING - t2.WORKLOAD FROM SEMESTER_WORKLOAD t2
       WHERE 
       (t1.ID_LECTURER, t1.ID_SW, 'WS10')=(t2.ID_LECTURER, t2.ID_SW, t2.ACADEMIC_SEMESTER) 
       FETCH FIRST ROWS ONLY
    )
    where exists 
    (
       SELECT * FROM SEMESTER_WORKLOAD t2
       WHERE 
       (t1.ID_LECTURER, t1.ID_SW, 'WS10')=(t2.ID_LECTURER, t2.ID_SW, t2.ACADEMIC_SEMESTER) 
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2021-10-30
      • 2011-10-07
      • 2013-01-07
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多