2011-08-04 5 views
0

行がターゲット内に存在しない場合、単に表から行を別の行に挿入したいと思うでしょう。 これをどのようにコードする必要がありますか?内部結合?以下 は、ソースとターゲットとの間に一致する行を返すクエリがSQLサーバー2000で結合が一致しないときに行が挿入される

select * from LOG_S1201_REFERENCE_T1 b 
inner join LOG_S1201_REFERENCE_STAGING_WT5 a on b.OU_ID=a.OU_ID  and 
b.Plant_desc=a.Plant_desc and b.workshop=a.workshop    and 
b.SerieNum=a.SerieNum  and b.Operation_type=a.Operation_type and 
b.PC10DBName=a.PC10DBName and b.SimuDBName=a.SimuDBName   and 
b.ProgramName=a.ProgramName and b.Calibre=a.Calibre 
+0

左結合をしなければならず、使用はNULL条件です。私の答えを確認してください – niktrs

答えて

0

左結合のすべての行といくつかの行を持つテーブルを結合します。

フィルターあなたがleft joinを行う必要が一致しない行を選択するためにIS NULL

INSERT INTO your_table 
select b.* 
from LOG_S1201_REFERENCE_T1 b 
left join LOG_S1201_REFERENCE_STAGING_WT5 a on b.OU_ID=a.OU_ID and b.Plant_desc=a.Plant_desc and b.workshop=a.workshop and b.SerieNum=a.SerieNum and b.Operation_type=a.Operation_type and b.PC10DBName=a.PC10DBName and b.SimuDBName=a.SimuDBName and b.ProgramName=a.ProgramName and b.Calibre=a.Calibre 
WHERE a.OU_ID IS NULL 
1

コピー行が例が必要INSERT SELECT

介して行うことができますか?

INSERT INTO new_table (col1, col2, col3) 
SELECT col4, col5, col6 
FROM old_table 
HAVING !(SELECT COUNT(*) FROM new_table WHERE col1 = old_table.col4) 
+0

はい、実際には私の内側の結合ステートメントで一致しない行を挿入したい – largo68

+0

上記のクエリはINNER JOINを処理でき、FROMの後ろに置いて、必要がなければHAVINGを削除します。 –

0

でテーブルの列に加わった左の一つ。

INSERT INTO LOG_S1201_REFERENCE_T1 b2 
SELECT a.* FROM LOG_S1201_REFERENCE_STAGING_WT5 a 
LEFT JOIN LOG_S1201_REFERENCE_T1 b ON 
    (b.OU_ID=a.OU_ID 
    AND b.Plant_desc=a.Plant_desc 
    AND b.workshop=a.workshop 
    AND b.SerieNum=a.SerieNum 
    AND b.Operation_type=a.Operation_type 
    AND b.PC10DBName=a.PC10DBName 
    AND b.SimuDBName=a.SimuDBName 
    AND b.ProgramName=a.ProgramName 
    AND b.Calibre=a.Calibre) 
WHERE b.OU_ID IS NULL 

これはselectbにないaからのすべての行は、次にaに挿入されるであろう。
abは同一である必要があります(bの行はaではありません)。

関連する問題