7

このクエリと混同される理由がわかりません。

レコード付きとレコードTable A付きの2つのテーブルがあります。両方のテーブルに同じデータが含まれている必要がありますが、いくつかの不一致があります。900Table B800

100不足しているレコードを からTable Aに挿入するには、mysql クエリを作成する必要がありますTable B

最終的に、Table ATable Bは同一である必要があります。

最初にすべてのエントリを切り捨ててから、別のテーブルから挿入したくありません。ですから、どんな助けでも大歓迎です。

ありがとうございました。

4

5 に答える 5

20

そのために利用することも可能LEFT OUTER JOINです。これにより、John Woo の回答のようにサブクエリのオーバーヘッド (外部クエリのレコードごとにシステムがサブクエリを 1 回実行する場合) が回避され、user2340435 のレコードのように既存の 800 レコードを上書きする不要な作業が回避されます。

INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;

これにより、最初にと両方のテーブルのすべての列を含むテーブルからすべての行が選択されますが、 table のすべての列に存在する行と存在しAない行はになります。次に、後者の行 ( ) のみをフィルタリングし、最後にこれらすべての行をテーブルに挿入します。BABBNULLWHERE b.id IS NULLB

于 2015-07-10T18:14:57.697 に答える
5

これなら使えると思いますIN。(これはクエリの簡略化です)

INSERT INTO table2 (id, name)
SELECT id, name
FROM table1
WHERE (id,name) NOT IN 
       (SELECT id, name
        FROM table2);

SQLFiddle デモ

デモンストレーションでわかるように、 にtable2は 1 つのレコードしかありませんが、クエリを実行した後、2 つのレコードが に挿入されましたtable2

于 2012-10-24T16:20:07.993 に答える