【问题标题】:PLSQL Join on an Update statement [duplicate]PLSQL加入更新语句[重复]
【发布时间】:2023-04-09 12:12:01
【问题描述】:

我正在尝试更新数据库中的一些信息,因为在有前缀时错误地使用了姓氏。

我已经构建了以下内容:

UPDATE subject_detail_overall sdo
JOIN subject_detail_personal sdp ON sdo.subject_id = sdp.subject_id
SET name_lessformal = 
    IF (sdp.sex = 1) THEN
        sdo.name_lessformal := substr(sdo.name_lessformal,1,7)||upper(substr(sdo.name_lessformal,8,1))||substr(sdo.name_lessformal,9)
    ELSIF (sdp.sex = 2) THEN    
        sdo.name_lessformal := substr(sdo.name_lessformal,1,5)||upper(substr(sdo.name_lessformal,6,1))||substr(sdo.name_lessformal,7)
    END IF
WHERE (sdp.sex = 1 OR sdp.sex = 2) AND 
((sdp.name_birthnameprefix IS NOT NULL AND ((sdp.useofname = 2) OR (sdp.useofname = 3))) 
OR (sdp.name_partnernameprefix IS NOT NULL) AND ((sdp.useofname = 1) OR (sdp.useofname = 4)))

这是在前缀的第一个字母前面只有一个miss或mister时将其转为大写。

useofname 是使用的姓氏以及使用顺序(partnername-birthname,仅 partnername 等)

看来我不能在那个地方使用 join,但我不知道如何重塑查询以使其正常工作。

【问题讨论】:

    标签: sql oracle sql-update


    【解决方案1】:
    • 您应该探测 MERGE INTO 语句。
    • SQL 使用针对 IF 的 CASE 子句。
    • 你应该忽略这么多,或者。这对性能非常不友好。

    你的sql可以是这样的。但我不能没有 表格。

    MERGE INTO subject_detail_overall sdo
    USING (
    SELECT subject_id, CASE WHEN dp.sex = 1
      THEN
    substr(sdo.name_lessformal,1,7)||upper(substr(sdo.name_lessformal,8,1))||substr(sdo.name_lessformal,9)
    WHEN dp.sex = 2
      THEN 
    substr(sdo.name_lessformal,1,5)||upper(substr(sdo.name_lessformal,6,1))||substr(sdo.name_lessformal,7)
    END AS result
    FROM subject_detail_personal sdp
    WHERE (sdp.sex = 1 OR sdp.sex = 2) AND 
    ((sdp.name_birthnameprefix IS NOT NULL AND ((sdp.useofname = 2) OR (sdp.useofname = 3))) 
    OR (sdp.name_partnernameprefix IS NOT NULL) AND ((sdp.useofname = 1) OR (sdp.useofname = 4))) 
    ) base ON sdo.subject_id = base.subject_id 
    
    WHEN MATCHED THEN UPDATE SET name_lessformal = base.result
    

    【讨论】:

    • 效果很好,只需要做一些小调整。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2015-02-01
    • 2014-12-31
    相关资源
    最近更新 更多