Cũng có thể sử dụng LEFT OUTER JOIN
cho điều đó. Điều này sẽ tránh chi phí truy vấn con (khi hệ thống có thể thực thi truy vấn con một lần cho từng bản ghi của truy vấn bên ngoài) như trong câu trả lời của John Woo và sẽ tránh thực hiện công việc không cần thiết ghi đè 800 bản ghi đã tồn tại như trong bản ghi của người dùng2340435:
INSERT INTO b
SELECT a.* FROM a
LEFT OUTER JOIN b ON b.id = a.id
WHERE b.id IS NULL;
Điều này trước tiên sẽ chọn tất cả các hàng từ A
và B
bảng bao gồm tất cả các cột từ cả hai bảng, nhưng đối với các hàng tồn tại trong A
và không tồn tại trong B
tất cả các cột cho B
bảng sẽ là NULL
.Sau đó, nó chỉ lọc các hàng sau như vậy (WHERE b.id IS NULL
), và cuối cùng nó chèn tất cả các hàng này vào B
bảng.