2016-09-29 23 views
1

Table_BのデータがTable_Aに存在しない場合、Table_Bのcolumn1のデータをTable_Aに挿入したいとします。たとえば、「頭痛」はTable_Bの列1にありますが、Table_Aの列1にはありません。ありがとう。私は、以下のSQLを書いたが、それはうまくいきませんでした:別のテーブルから1つのテーブルに挿入

insert into Table_A(column1) 
select column1 
from Table_B 
where column1 not in (select column1 from Table_A) 
+0

*「動作しませんでした」*とはどういう意味ですか?あなたは精緻化できますか?間違いましたか?また、どのDBMSを使用していますか? – GarethD

答えて

1

これ試してみてください。確かに言うのは難しいですが、私の最高の推測では次のようになりなしたサンプルデータで

INSERT INTO Table_A(column1) 
SELECT B.column1 
FROM Table_B B 
LEFT JOIN Table_A A ON B.column1 = A.column1 
WHERE A.column1 IS NULL 
0
Insert into Table_A(column1) 
select column1 from Table_B 
left join Table_A on Table_B.column1 = Table_A.column1 
where A.column1 is null 
0

table_A.Column1NULLという値があることを確認してください。 Column1 <> NULLは事実ではないので、クエリは結果を返しません

SELECT Column1 
FROM Table_B 
WHERE Column1 <> 1 
AND  Column1 <> 2 
AND  Column1 <> 3 
AND  Column1 <> NULL; 

:と同等です

SELECT Column1 
FROM Table_B 
WHERE Column1 NOT IN (1, 2, 3, NULL); 

:あなたはnull値を持っていた場合は、クエリのようなものに相当します。あなたがNULLの列を持っている可能性がある所望の結果を達成するための最も構文的に類似した方法は、NOT EXISTSを使用している:

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE NOT EXISTS (SELECT 1 FROM Table_A AS A WHERE A.Column1 = B.Column1); 

しかし、あなたが使用できる別の方法がある。この中

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
     LEFT JOIN Table_A AS A 
      ON A.Column1 = B.Column1 
WHERE A.Column1 IS NULL; 

table_Aに参加してA.Column1NULLである必要があると指定した場合、すでにTable_Aに存在するレコードは削除されます。

私は意図がはるかに明確であると思いますが、もしあなたuse MySQL the latter will perform better

それとも、また使用することができますので、私は、(NOT EXISTS)の元を好む:

INSERT INTO Table_A(column1) 
SELECT Column1 
FROM Table_B AS B 
WHERE B.Column1 IS NOT NULL 
AND  B.COlumn1 NOT IN (SELECT A.Column1 FROM Table_A AS A WHERE A.Column1 IS NOT NULL); 
0

何MERGE文を使用してはどうですか?

MERGE INTO TABLE_A a 
USING TABLE_B b ON (a.column1=b.column1) 
WHEN NOT MATCHED THEN 
    INSERT (column1) VALUES (b.column1); 
関連する問題