Pertanyaan MySQL Menggunakan Inner Join untuk Kemas Kini
Seorang pengguna baru-baru ini mengalami ralat semasa cuba melaksanakan kenyataan UPDATE menggunakan INNER JOIN dalam MySQL 5.0. Ralat berlaku walaupun menggunakan nama medan yang betul.
Pertanyaan asal adalah seperti berikut:
UPDATE b SET b.mapx = g.latitude, b.mapy = g.longitude FROM business AS b INNER JOIN business_geocode g ON b.business_id = g.business_id WHERE (b.mapx = '' OR b.mapx = 0) AND g.latitude > 0
Isunya terletak pada sintaks pertanyaan. Untuk menyelesaikannya, jadual mesti dinamakan secara eksplisit dalam kenyataan UPDATE. Pertanyaan yang diperbetulkan ialah:
UPDATE business AS b INNER JOIN business_geocode AS g ON b.business_id = g.business_id SET b.mapx = g.latitude, b.mapy = g.longitude WHERE (b.mapx = '' or b.mapx = 0) and g.latitude > 0
Pengguna juga mengalami ralat sintaks. Untuk mengesahkan bahawa pertanyaan yang diperbetulkan tidak mengandungi ralat sintaks, jadual berikut telah dibuat untuk ujian:
CREATE TABLE business (business_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, mapx VARCHAR(255), mapy VARCHAR(255)) ENGINE=INNODB; CREATE TABLE business_geocode (business_geocode_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, business_id INT UNSIGNED NOT NULL, latitude VARCHAR(255) NOT NULL, longitude VARCHAR(255) NOT NULL, FOREIGN KEY (business_id) REFERENCES business(business_id)) ENGINE=INNODB;
Apabila melaksanakan pertanyaan yang diperbetulkan terhadap jadual ini menggunakan MySQL 5.5.8, tiada ralat sintaks berlaku. Hasil pertanyaan menunjukkan bahawa tiada baris yang dipadankan atau diubah.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Data MySQL Dengan Betul Menggunakan INNER JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!