LEFT OUTER JOINを使用することもできます そのために。これにより、サブクエリのオーバーヘッドが回避されます(システムが各に対してサブクエリを1回実行する場合 ジョン・ウーの回答のように外部クエリのレコード)、user2340435のように既存の800レコードを上書きする不要な作業を回避します:
INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
これにより、最初にAからすべての行が選択されます およびB 両方のテーブルのすべての列を含むテーブル。ただし、Aに存在する行の場合 Bには存在しません Bのすべての列 テーブルはNULLになります 次に、そのような後者の行のみをフィルタリングします(WHERE b.id IS NULL )、そして最後にこれらすべての行をBに挿入します テーブル。