Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chèn bằng cách sử dụng LEFT JOIN và INNER JOIN

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để biết giao dịch nào đang gây ra trạng thái khóa siêu dữ liệu bảng Đang chờ?

  2. máy chủ MySQL không liên tục đã biến mất lỗi

  3. MySQL:Chọn mục nhập ngẫu nhiên, nhưng có trọng lượng đối với các mục nhập nhất định

  4. Tại sao kết quả của `select 'a' =0;` 1?

  5. Cơ sở dữ liệu góc:Hướng dẫn mới bắt đầu để công cụ lưu trữ Mysql