Oracle:用其他表中的值更新
CREATE TABLE TB1 ( SYSNO INT, VAL1 VARCHAR2(2), VAL2 VARCHAR2(2) )
CREATE TABLE TB2 ( SYSNO2 INT, VAL3 VARCHAR2(2), VAL4 VARCHAR2(2) )
INSERT INTO TB1(SYSNO, VAL1, VAL2) VALUES (1, 'A1', 'A2') INSERT INTO TB1(SYSNO, VAL1, VAL2) VALUES (2, 'B1', 'B2') INSERT INTO TB2(SYSNO2, VAL3, VAL4) VALUES (1, 'A3', 'A4') INSERT INTO TB2(SYSNO2, VAL3, VAL4) VALUES (2, 'B3', 'B4')
----------------------------------------------------------
SELECT * FROM TB1 SELECT * FROM TB2
--用 TB2 的 VAL3 更新 TB1 的 VAL1 (只更新 SYSNO = 1 的行記錄) UPDATE TB1 SET VAL1 = ( SELECT VAL3 FROM TB2 WHERE TB2.SYSNO2 = TB1.SYSNO AND TB2.SYSNO2 = 1) WHERE EXISTS ( SELECT NULL FROM TB2 WHERE TB2.SYSNO2 = TB1.SYSNO AND TB2.SYSNO2 = 1 )
--用 TB2 的 VAL3 更新 TB1 的 VAL1, 用 TB2 的 VAL4 更新 TB1 的 VAL2 (只更新 SYSNO = 2 的行記錄)
UPDATE TB1 SET (VAL1, VAL2) = ( SELECT VAL3, VAL4 FROM TB2 WHERE TB2.SYSNO2 = TB1.SYSNO AND TB2.SYSNO2 = 2) WHERE EXISTS ( SELECT NULL FROM TB2 WHERE TB2.SYSNO2 = TB1.SYSNO AND TB2.SYSNO2 = 2 )
SELECT * FROM TB1
COMMIT