2

に新しい行を挿入し、 からのデータで行を部分的にロードしようとしtable aますtable bb.idフィールドが列に存在しない場合にのみ、新しい行を挿入したいと思いa.idます。

ここに私のテーブルがあります:

table_a       table_b
---------     -----------
id             id
first_name     first_name
country        middle_name
last_name      last_name

これが私のコードです:

INSERT INTO table_a a
SELECT b.id, b.first_name,b. last_name
FROM table_b b WHERE b.id <> a.id

質問: insert select ステートメントを使用してこれを行うにはどうすればよいですか? これを私の現在の状況と比較しやすくするために、ある表にミドルネームを、別の表に国を含めたことに注意してください. フィールドを「マップ」する方法はありますか? または、insert select ステートメントに挿入する値の数がターゲット テーブルとまったく同じであることを確認する必要がありますか? それとも、一致する列名を探して、一致する列のみを更新しますか?

4

3 に答える 3

3

フィールド b.id が a.id 列に存在しない場合にのみ、新しい行を挿入したいと思います。

別の解決策は、LEFT JOINおよびを使用することですIS NULL

INSERT INTO table_a
SELECT  b.*
FROM    table_b b
        LEFT JOIN table_a a
            ON a.ID = b.ID
WHERE   a.ID IS NULL
于 2013-01-14T04:40:00.570 に答える
2

次のことができます.idがtable_aに存在するかどうかを確認してください

INSERT INTO table_a (id, first_name, last_name)
SELECT b.id, b.first_name,b.last_name
FROM table_b b
WHERE not exists (SELECT 1 FROM table_a a WHERE b.id = a.id)

国列はすべての行で null になります。静的な値を保存する場合、クエリは次のようにする必要があります

INSERT INTO table_a (id, first_name, country, last_name)
SELECT b.id, b.first_name, 'USA', b.last_name
FROM table_b b
WHERE not exists (SELECT 1 FROM table_a a WHERE b.id = a.id)
于 2013-01-13T22:09:25.993 に答える
-1

これを試して

   INSERT INTO table_a a (id , first_name , last_name) Values (
                SELECT b.id, b.first_name,b.last_name
                FROM table_b b WHERE  a.id not in (select id from table_b) )
于 2013-01-13T22:15:54.913 に答える