Musisz dokładnie określić kolumny, które wybierasz. Jeśli Twój user
tabela miała cztery kolumny id, name, username, opted_in
musisz wybrać dokładnie te cztery kolumny z zapytania. Składnia wygląda następująco:
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
Jednak wydaje się, że nie ma żadnego powodu, aby dołączyć przeciwko user_permission
tutaj, ponieważ żadna z kolumn z tej tabeli nie zostanie wstawiona do user
. W rzeczywistości to INSERT
wydaje się skazany na niepowodzenie w przypadku naruszenia unikalności klucza podstawowego.
MySQL nie obsługuje wstawiania do wielu tabel jednocześnie. Musisz wykonać dwa INSERT
instrukcji w kodzie, używając ostatniego identyfikatora wstawiania z pierwszego zapytania lub utworzyć AFTER INSERT
wyzwalacz w tabeli podstawowej.
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)
Lub za pomocą wyzwalacza :
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