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

Chèn mysql nếu không tồn tại mà không có khóa duy nhất

Truy vấn thành công (nếu không thì mysql_query() sẽ không trả về true ) nhưng nó không chèn bất kỳ hàng nào. Lời giải thích duy nhất cho điều đó là SELECT một phần dẫn đến một tập hợp trống. Đó là vì LEFT JOIN trả về các hàng tồn tại trong t1 nhưng không có trong t2 , nhưng lựa chọn được thực hiện trên NULL các hàng trong t1 .

Điều này sẽ hoạt động:

INSERT teamshalf
(`yearID` , `lgID` , `teamID` , `Half` , 
`divID` , `DivWin` , `Rank` , `G` , `W` , `L`)
 SELECT DISTINCT t1.`yearID` , t1.`lgID` , t1.`teamID` ,
 t1.`Half` , t1.`divID` , t1.`DivWin` , t1.`Rank` , t1.`G` , t1.`W` , t1.`L` 
 FROM `teamshalf_TEMP` t1 LEFT JOIN `teamshalf` t2 ON t1.`yearID` = t2.`yearID`
 AND t1.`lgID` = t2.`lgID` AND t1.`teamID` = t2.`teamID`
 AND t1.`Half` = t2.`Half` AND t1.`divID` = t2.`divID`
 AND t1.`DivWin` = t2.`DivWin` AND t1.`Rank` = t2.`Rank`
 AND t1.`G` = t2.`G` AND t1.`W` = t2.`W` AND t1.`L` = t2.`L`
 WHERE t2.`yearID` IS NULL

Cũng lưu ý rằng mysql_query() không được dùng nữa. Và bạn nên khai báo các cột phải chứa dữ liệu là NOT NULL , vì vậy NULL sẽ không được chấp nhận. Và truy vấn của bạn sẽ chậm vì bạn không sử dụng chỉ mục.



  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 để so khớp mờ email hoặc điện thoại bằng Elasticsearch?

  2. Phân tích cú pháp JSON thành bảng MySQL

  3. Sử dụng biểu thức chính quy để xác thực các câu lệnh mysql

  4. Lỗi MySQL:2013, Mất kết nối với máy chủ MySQL lúc 'đang đọc gói giao tiếp ban đầu', lỗi hệ thống:0

  5. Tham gia - các trường trong bảng 2 ghi đè các trường trong bảng 1