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
に挿入します テーブル。