2017-10-11 15 views
-8

以下はその例です。表1は、最初の3つの列がここで外部ファイルからロードされる場合に手動で作成されます。第4列(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 

STEP 1:Update NM_CPR_COS_MAT column from table 1。これは、表1と表2からNAME,OLD_CPR_NO,OLD_COS_NO試合はその後、割り当てインジケータフィールドであるインジケータ「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; 

結果:

下記の結果のテーブルから
TABLE 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  |   | 

、私はUPDATE SHOWROOM_ID columnNM_CPR_MAT

再びする必要が
TABLE 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; 

私はRESULTS.I AMの下に新しいUPDATE文のNM_CPR_MAT COLUMNSもSHOWROOM_IDで正しい数の正しい「Y」を取得していますGETTINGしかしPREVIOUS UPDATED文で更新された数字がなくなっていました。

TABLE 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

そして、このWebサイト上であなたの記事をフォーマットする方法を学ぶいくつかの時間を費やします。あなたが急いでいるなら、それはあなたの問題です。あなたは急いでいるときにここに投稿するべきではありません。 – mathguy

答えて

0

あなたは不正なSQLを掲載しているが、両方のクエリは、テーブル全体を更新するようだ時に確認するためにかなり難しいです。サブクエリの条件がtab2のものと一致しない場合、更新によってnullが割り当てられます。したがって、2番目のクエリは最初のクエリの結果を上書きします。

あなたは簡単に追加することによってこの問題を解決することができWHERE第2の更新文の条件:

where SHOWROOM_ID is null 
関連する問題