Bạn phải cụ thể về các cột bạn đang chọn. Nếu user
của bạn bảng có bốn cột id, name, username, opted_in
bạn phải chọn chính xác bốn cột đó từ truy vấn. Cú pháp có dạng:
INSERT INTO user (id, name, username, opted_in)
SELECT id, name, username, opted_in
FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
Tuy nhiên, dường như không có bất kỳ lý do gì để tham gia chống lại user_permission
ở đây, vì không cột nào từ bảng đó sẽ được chèn vào user
. Trên thực tế, INSERT
này có vẻ như chắc chắn sẽ thất bại với các vi phạm về tính duy nhất của khóa chính.
MySQL không hỗ trợ chèn vào nhiều bảng cùng một lúc. Bạn cần thực hiện hai INSERT
câu lệnh trong mã của bạn, sử dụng id chèn cuối cùng từ truy vấn đầu tiên hoặc tạo AFTER INSERT
kích hoạt trên bảng chính.
INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
/* Gets the id of the new row and inserts into the other table */
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)
Hoặc sử dụng trình kích hoạt :
CREATE TRIGGER creat_perms AFTER INSERT ON `user`
FOR EACH ROW
BEGIN
INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
END