2

2 つのテーブル t1 と t2 があります。t1 の値が重複しています。t1 から t2 までのすべてのレコードを挿入する必要がありますが、t2 で重複が発生することは望ましくありません。次のコマンドを試してみましたが、実行しても構文エラーはないように見えますが、問題はありません。効果はありません。t2 に挿入された t1 からのレコードはありません。

insert into test.t2 (name2) 
select name1 from test.t1 where NOT EXISTS (select name2 from test.t2);

誰でも助けることができますか?

4

5 に答える 5

6
insert into test.t2(name2) 
select distinct name1 from test.t1 where name1 NOT IN(select name2 from test.t2);

また

insert into test.t2(name2) 
select distinct name1 from test.t1 t1 where NOT EXISTS(select name2 from test.t2 t2 where t1.name1=t2.name2);
于 2012-11-26T17:14:18.867 に答える
1

(1 つ以上の列の) 一意のインデックスを作成してから、MySQL の replace コマンドを使用できます。

CREATE UNIQUE INDEX unique_name2 ON t2 (name2);

REPLACE INTO t2 (name2) values ($name1);
...
于 2012-11-26T17:40:47.277 に答える
0

ユーザーから別のユーザーにデータを挿入する必要があり、このステートメントを書くときに.....

insert into trep12.jobhead
select
*
from
wsfin04.jobhead
where
wsfin04.jobhead.job_no not in (select job_no from trep12.jobhead)
and wsfin04.jobhead.CHASS_NO not in (select CHASS_NO from trep12.jobhead)
and rdate between '01-jul-15'
and '01-oct-15'
and job_type = 1;

..... 結果は 0 行作成されます。

于 2015-10-21T07:27:58.233 に答える
0

ここには 2 つのオプションがあります。1 つは挿入時にデータを複製しないことで、もう 1 つは挿入時に重複を無視することです。

呼び出しから重複を排除するには、SELECT`DISTINCT を使用します。

INSERT INTO test.t2 (name2) SELECT name1 FROM test.t1 WHERE name1 NOT IN (SELECT name2 FROM test.t2)

UNIQUEそもそもこの問題を回避するために、インデックスを追加することもできます。

ALTER TABLE t2 ADD UNIQUE INDEX index_name2 (name2)

にすでに重複データがある場合はエラーが発生するため、t2事前にクリーンアップする必要がある場合があることに注意してください。

次に、IGNOREオプションを使用してデータを追加できます。

INSERT IGNORE INTO test.t2 (name2) SELECT name1 FROM TEST.t1

一意のインデックス アプローチは、一意性を保証します。

于 2012-11-26T17:15:58.240 に答える
-1


INSERT IGNORE INTO test.t2 SELECT name2 FROM test.t1
あるテーブルから選択し、別のテーブルに挿入します。

于 2012-11-26T17:18:07.200 に答える