使用加入条件更新语句

时间:2017-09-27 13:14:17

标签: oracle

以下是一个例子。表1是手动创建的前三列 从外部文件加载到这里。第四列(SHOWROOM_ID)将取自TABLE2 表1中的其余列将根据标准进行更新。

表1

NAME     |OLD_CPR_NO |OLD_COS_NO |SHOWROOM_ID|NM_CPR_COS_MAT|NM_CPR_MAT|COS_CPR_MAT|
------------------------------------------------------------------------------------
FORD     | 45        | 487       |           |              |          |    
TOYOTA   | 78        | 562       |           |              |          |
BENZ     | 55        | 789       |           |              |          |
JEEP     | 66        | 124       |           |              |          |
HONDA    | 34        | 142       |           |              |          |
KIA      | 12        | 962       |           |              |          |
GM       | 89        | 7787      |           |              |          |
CHRYSLER | 45        | 236       |           |              |          |
AUDI     | 67        | 4789      |           |              |          |

表2

PK|NAME     |OLD_CPR_NO |OLD_COS_NO |SHOWROOM_ID
---------------------------------------------
1  |FORD     | 45        | 487       |   1    
2  |TOYOTA   | 78        | 562       |   2   
3  |CIAT     | 55        | 789       |   3     
4  |JEEP     | 66        | 124       |   5    
5  |HONDA    | 34        | 456       |   6   
6  |MUSTANG  | 12        | 962       |   7   
7  |GM       | 89        | 56        |   8   
8  |CHRYSLER | 45        | 236       |   9   
9  |AUDI     | 67        | 4789      |   10  

步骤1:更新表1中的NM_CPR_COS_MAT列。这是一个指示符字段 其中NAME,OLD_CPR_NO,OLD_COS_NO与表1和表2匹配,然后分配指标' Y'

我能够根据以下查询获得结果:

UPDATE TABLE_1 TAB1
SET NM_CPR_COS_MAT = (SELECT 'Y'
FROM 
TABLE_2 TAB2
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
AND TRIM(TAB1.OLD_COS_NO) = TRIM(TAB2.OLD_COS_NO)
;
COMMIT;

UPDATE TABLE_1 TAB1
SET SHOWROOM_ID= (SELECT TAB2.SHOWROOM_ID
FROM 
TABLE_2 TAB2
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
AND TRIM(TAB1.OLD_COS_NO) = TRIM(TAB2.OLD_COS_NO)
AND TRIM(TAB1.NM_CPR_COS_MAT) = 'Y'
;
COMMIT;

结果:

表1

NAME     |OLD_CPR_NO |OLD_COS_NO |SHOWROOM_ID|NM_CPR_COS_MAT|NM_CPR_MAT|COS_CPR_MAT|
------------------------------------------------------------------------------------
FORD     | 45        | 487       |      1    |       Y      |          |    
TOYOTA   | 78        | 562       |      2    |       Y      |          |
BENZ     | 55        | 789       |           |              |          |
JEEP     | 66        | 124       |      5    |       Y      |          |
HONDA    | 34        | 142       |           |              |          |
KIA      | 12        | 962       |           |              |          |
GM       | 89        | 7787      |           |              |          |
CHRYSLER | 45        | 236       |     9     |       Y      |          |
AUDI     | 67        | 4789      |     10    |      Y       |          |

但是如果我尝试使用join语句,我会收到错误。

UPDATE TABLE_1 TAB1
SET NM_CPR_COS_MAT = 'Y'
FROM 
TABLE_2 TAB2 JOIN
TABLE_1 TAB1 ON 
TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_COS_NO) = TRIM(TAB2.OLD_COS_NO)
;
COMMIT;
ORA-00933: SQL command not properly ended.

从下面的结果表中,我必须再次更新SHOWROOM_ID列和NM_CPR_MAT

表1

NAME     |OLD_CPR_NO |OLD_COS_NO |SHOWROOM_ID|NM_CPR_COS_MAT|NM_CPR_MAT|COS_CPR_MAT|
------------------------------------------------------------------------------------
FORD     | 45        | 487       |      1    |       Y      |          |    
TOYOTA   | 78        | 562       |      2    |       Y      |          |
BENZ     | 55        | 789       |           |              |          |
JEEP     | 66        | 124       |      5    |       Y      |          |
HONDA    | 34        | 142       |           |              |          |
KIA      | 12        | 962       |           |              |          |
GM       | 89        | 7787      |           |              |          |
CHRYSLER | 45        | 236       |     9     |       Y      |          |
AUDI     | 67        | 4789      |     10    |      Y       |          |


STEP 2:
UPDATE TABLE_1 TAB1
SET NM_CPR_MAT = (SELECT 'Y'
FROM 
TABLE_2 TAB2
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
AND TRIM(NM_CPR_COS_MAT) IS NULL
;
COMMIT;

UPDATE TABLE_1 TAB1
SET SHOWROOM_ID= (SELECT TAB2.SHOWROOM_ID
FROM 
TABLE_2 TAB2
WHERE
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
AND TRIM(NM_CPR_COS_MAT) IS NULL
AND TRIM(NM_CPR_MAT) = 'Y'
;
COMMIT;

我正在取得以下结果。我正在接受正确的结果' Y'在NM_CPR_MAT列中 SHOWROOM_ID中的正确数字也是新的更新声明但是数字也是如此 在更新后的声明中已经更新了。

表1

NAME     |OLD_CPR_NO |OLD_COS_NO |SHOWROOM_ID|NM_CPR_COS_MAT|NM_CPR_MAT|COS_CPR_MAT|
------------------------------------------------------------------------------------
FORD     | 45        | 487       |           |       Y      |          |    
TOYOTA   | 78        | 562       |           |       Y      |          |
BENZ     | 55        | 789       |           |              |          |
JEEP     | 66        | 124       |           |       Y      |          |
HONDA    | 34        | 142       |      6    |              |    Y     |
KIA      | 12        | 962       |           |              |          |
GM       | 89        | 7787      |      8    |              |    Y     |
CHRYSLER | 45        | 236       |           |      Y       |          |
AUDI     | 67        | 4789      |           |      Y       |          |

1 个答案:

答案 0 :(得分:0)

语法错误,缺少(在'Y'之前选择,并且不要忘记最后匹配的结束括号。

UPDATE TABLE_1 TAB1
   SET NM_CPR_COS_MAT = (SELECT 'Y'
FROM
TABLE_2 TAB2 JOIN
TABLE_1 TAB1 ON
TRIM(TAB1.OLD_CPR_NO) = TRIM(TAB2.OLD_CPR_NO)
WHERE
TRIM(TAB1.NAME) = TRIM(TAB2.NAME)
AND TRIM(TAB1.OLD_COS_NO) = TRIM(TAB2.OLD_COS_NO));