0

ここで使用されるクエリ

INSERT INTO tags (name, type, tag_type_id) SELECT name, 'open', (SELECT id from types where name = tag_types.name) FROM tag_types

以下のような値にすることができます

INSERT INTO tags (name, type, tag_type_id) ('first', 'open', 2), ('second', 'open', 5), ('first', 'open', 2);

上記のようなエントリを繰り返したくありません。とがテーブルに同様の値で存在するnameかどうかを確認する必要があります。tag_type_id存在する場合は、重複エントリを避けてください。

上記のクエリを変更してエントリの重複を回避するにはどうすればよいですか?

フィールドにインデックスがありません。

4

1 に答える 1

2

あなたがする必要があるのは、一意として保持したい2つの列にまたがる一意のインデックスを作成し、挿入ステートメントを読み取りに変更することINSERT IGNORE INTO ...です。これにより、重複がテーブルに入るのを防ぎます。

ALTER TABLE tags ADD UNIQUE INDEX unq_name_type (name, tag_type_id);

それから挿入するとき;

INSERT IGNORE INTO tags (name, type, tag_type_id) ('first', 'open', 2), ('second', 'open', 5), ('first', 'open', 2);

INSERT IGNORE INTO tags (name, type, tag_type_id) SELECT name, 'open', (SELECT id from types where name = tag_types.name) FROM tag_types;

それが役立つことを願っています:)

于 2012-08-14T07:58:13.987 に答える