Mysql
 sql >> база данни >  >> RDS >> Mysql

Вмъкнете с помощта на LEFT JOIN и INNER JOIN

Трябва да сте конкретни за колоните, които избирате. Ако вашият user таблицата имаше четири колони id, name, username, opted_in трябва да изберете точно тези четири колони от заявката. Синтаксисът изглежда така:

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

Изглежда обаче няма причина да се присъедините срещу user_permission тук, тъй като нито една от колоните от тази таблица няма да бъде вмъкната в user . Всъщност това INSERT изглежда неизбежно се провали с нарушения на уникалността на първичния ключ.

MySQL не поддържа вмъквания в няколко таблици едновременно. Трябва или да изпълните две INSERT изрази във вашия код, като използвате последния идентификатор за вмъкване от първата заявка или създайте AFTER INSERT тригер на основната маса.

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)

Или с помощта на задействане :

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. Подобрете хеширането на пароли с произволна сол

  2. mysqli множество заявки - set променлива произвежда булева грешка/как да пропуснете това?

  3. Настройка на таблицата за ширина и дължина на MySQL

  4. Заявките за актуализиране на mysql имат ли полза от индекс?

  5. mysql_real_escape_string() повреден ли е?