更新oracle中的多个列

时间:2015-01-08 05:09:08

标签: sql oracle

我有疑问:

UPDATE SDM_KARYAWAN
SET (ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN) = 
(
    SELECT ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN FROM
        (
        SELECT TO_CHAR(TGL_SK,'YYYYMMDD') URUT,ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN
        FROM SDM_KARYAWAN_JABATAN
        WHERE ID_KARYAWAN = '0081005'
        ORDER BY URUT DESC
        )DETAIL
    WHERE ROWNUM = 1
)X
WHERE ID_KARYAWAN = '0081005'

但是显示如下错误:[错误] ORA-00933:SQL命令未正确结束

实际上我可以使用这段代码:

UPDATE TABLE1 SET COL1 = 'A',COL2='B',COL3='C'...

但我想要的是更新多个列,如下所示:

UPDATE TABLE1 SET (COL1,COL2,COL3) (SELECT COL1,COL2,COL3 FROM TABLE2)

:: EDIT :: 我试过这个:

SELECT A.ID_DIVISI,A.ID_UNIT_KERJA,A.ID_JABATAN,
        DETAIL.ID_DIVISI X,DETAIL.ID_UNIT_KERJA Y,DETAIL.ID_JABATAN Z
    FROM SDM_KARYAWAN A
    INNER JOIN 
    (
    SELECT ID_KARYAWAN, TO_CHAR(TGL_SK,'YYYYMMDD') URUT,ID_DIVISI,ID_UNIT_KERJA,ID_JABATAN
    FROM SDM_KARYAWAN_JABATAN
    WHERE ID_KARYAWAN = '0081005'
    ORDER BY URUT DESC
    )DETAIL
    ON DETAIL.ID_KARYAWAN = A.ID_KARYAWAN
    WHERE A.ID_KARYAWAN = DETAIL.ID_KARYAWAN
    AND ROWNUM = 1

结果:

ID_DIVISI    ID_UNIT_KERJA    ID_JABATAN    X    Y    Z
-----------------------------------------------------------
D1           D5000             D51000       D2  D200  D2100

现在,我想用X,Y,Z值更新表SDM_KARYAWAN上的列。我的查询中缺少什么? PLS。

3 个答案:

答案 0 :(得分:3)

这会奏效。请检查。

UPDATE SDM_KARYAWAN
SET (ID_DIVISI,
    ID_UNIT_KERJA,
    ID_JABATAN) =
      (SELECT ID_DIVISI, ID_UNIT_KERJA, ID_JABATAN
         FROM (  SELECT TO_CHAR (TGL_SK,'YYYYMMDD')
                           URUT,
                        ID_DIVISI,
                        ID_UNIT_KERJA,
                        ID_JABATAN
                   FROM SDM_KARYAWAN_JABATAN
                  WHERE ID_KARYAWAN = '0081005'
               ORDER BY 1 DESC) DETAIL
        WHERE ROWNUM = 1)
WHERE ID_KARYAWAN = '0081005'

答案 1 :(得分:0)

试试这个:

 UPDATE 
(SELECT 
Table1.Col1 as OLD1, Table2.Col1 as NEW1
Table1.Col2 as OLD2, Table2.Col2 as NEW2
 FROM Table1
 INNER JOIN Table2
-- ON Some Join Conditions
) t
SET t.OLD1 = t.NEW1,
SET t.OLD2 = t.NEW2

答案 2 :(得分:0)

UPDATE <TABLENAME>
SET STATUS = CASE
             WHEN WID = 1 THEN 1
             WHEN WID = 2 THEN 0
             WHEN WID = 3 THEN 1
             END
WHERE WID IN (1,2,3);

注意:需要命令的地方...

相关问题