2

テーブルからデータを選択して別のテーブルに挿入することで、データを更新しています。ただし、他のテーブルにはいくつかの制約があり、次のようになります。

DETAIL:  Key (entry_id)=(391) is duplicated.

私は基本的にこれを行います:

insert into table_tmp 
select * from table_one

このキー エントリの重複が発生したときに挿入をスキップするにはどうすればよいですか?

更新 SQLフィドルでこのスキーマ情報を保存できませんが、ここにあります:

CREATE TABLE table1
    ("entry_id" int, "text" varchar(255))
;

INSERT INTO table1
    ("entry_id", "text")
VALUES
    (1, 'one'),
    (2, 'two'),
    (3, 'test'),
    (3, 'test'),
    (12, 'three'),
    (13, 'four')
;



CREATE TABLE table2
    ("entry_id" int, "text" varchar(255))
;

Create unique index entry_id_idxs
on table2 (entry_id)
where text='test';

INSERT INTO table2
    ("entry_id", "text")
VALUES
    (1, 'one'),
    (2, 'two'),
    (3, 'test'),
    (3, 'test'),
    (12, 'three'),
    (13, 'four')
;

スキーマを構築しようとすると発生するエラー

4

2 に答える 2

2

一致しない行を返す結合を使用して挿入します。

INSERT INTO table2
SELECT DISTINCT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t2.entry_id = t1.entry_id
WHERE t2.entry_id IS NULL
于 2013-11-01T10:30:42.960 に答える
2

このクエリを使用します - SQLFiddle Demo :

INSERT INTO table2 
SELECT t1.* FROM table1 t1
WHERE NOT EXISTS (
    SELECT entry_id
    FROM table2 t2
    WHERE t2.entry_id = t1.entry_id
)
于 2013-11-01T10:24:07.017 に答える