Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstaw używając LEFT JOIN i INNER JOIN

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql error 2005 - Nieznany host serwera MySQL 'localhost' (11001)

  2. nie można wyświetlić symbolu znaku towarowego w mysql do html

  3. Osiąganie przełączania awaryjnego i powrotu po awarii MySQL na Google Cloud Platform (GCP)

  4. MYSQL importuje dane z csv za pomocą LOAD DATA INFILE

  5. Użyj relacyjnych baz danych MySQL w Fedorze 14