ऐसा लगता है कि MySQL 5.6 UPDATE
executing को क्रियान्वित करने के बारे में सीमित है JOIN
. के साथ स्टेटमेंट
तो, के बजाय
UPDATE table1 a
INNER JOIN table2 asa
ON a.ID = asa.Table1Id
SET a.ReferenceID = asa.ReferenceID
WHERE a.ID > 0 AND asa.ID > 0
आपको जितने आवश्यक हो उतने प्रश्न लिखने होंगे जैसे:
UPDATE table1 a
SET a.ReferenceID = <The corresponding value in table 2>
WHERE a.ID = <The corresponding ID>
यह टाइप करने के लिए बहुत कष्टप्रद है, कोई व्यक्ति अद्यतन क्वेरी बनाने के लिए गतिशील SQL का उपयोग कर सकता है:
SELECT CONCAT('UPDATE table1 a SET a.ReferenceID = ', asa.ReferenceID, ' WHERE a.ID = ', t.ID, ';')
FROM table1 t
INNER JOIN table2 asa
ON t.ID = asa.Table1Id;
उदाहरण के लिए:
स्कीमा (MySQL v5.6)
CREATE TABLE test
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
foo VARCHAR(255)
);
CREATE TABLE test2
(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
id_test INT NOT NULL,
foo VARCHAR(255),
FOREIGN KEY (id_test) REFERENCES test(id)
);
INSERT INTO test (foo) VALUES ('hello'), ('world');
INSERT INTO test2 (id_test, foo) VALUES (1, 'bar'), (2, 'baz');
क्वेरी #1
SELECT CONCAT('UPDATE test t SET t.foo = ''', t2.foo, ''' WHERE t.id = ', t.id, ';') AS 'sql query'
FROM test t
INNER JOIN test2 t2
ON t.id = t2.id_test;
यह आउटपुट :
UPDATE test t SET t.foo = 'bar' WHERE t.id = 1;
UPDATE test t SET t.foo = 'baz' WHERE t.id = 2;
आउटपुट का उपयोग अब मैन्युअल रूप से . के लिए किया जा सकता है अलग-अलग पंक्तियों को अपडेट करें