Det ser ud til, at MySQL 5.6 er begrænset til at udføre en OPDATERING
sætning sammen med en JOIN
Så i stedet for
OPDATERING tabel1 aINNER JOIN tabel2 asaON a.ID =asa.Table1IdSET a.ReferenceID =asa.ReferenceIDWHERE a.ID> 0 OG asa.ID> 0
Du bliver nødt til at skrive så mange forespørgsler som nødvendigt, f.eks.:
OPDATERING tabel1 aSET a.ReferenceID =HVOR a.ID =
Dette er ret irriterende at skrive, man kan bruge dynamisk SQL til at bygge opdateringsforespørgslerne :
SELECT CONCAT('OPDATERING tabel1 a SET a.ReferenceID =', asa.ReferenceID, ' WHERE a.ID =', t.ID, ';')FRA tabel1 tINNER JOIN tabel2 asaON t.ID =asa.Table1Id;
For eksempel:
Skema (MySQL v5.6)
CREATE TABLE test( id INT IKKE NULL PRIMÆR NØGLE AUTO_INCREMENT, foo VARCHAR(255)); CREATE TABLE test2( id INT IKKE NULL PRIMÆR NØGLE AUTO_INCREMENT, id_test INT IKKE NULL, foo VARCHAR(255), FOR (id_test) REFERENCER test(id));INSERT INTO test (foo) VALUES ('hello'), ('world');INSERT INTO test2 (id_test, foo) VALUES (1, 'bar'), (2, ' baz');
Forespørgsel #1
SELECT CONCAT('OPDATERING test t SET t.foo =''', t2.foo, ''' WHERE t.id =', t.id, ';') SOM 'sql-forespørgsel'FROM test tINNER JOIN test2 t2ON t.id =t2.id_test;
Dette udsender:
OPDATERING test t SET t.foo ='bar' WHERE t.id =1;OPDATERING test t SET t.foo ='baz' WHERE t.id =2;
Outputtet kan nu bruges til at manuelt opdatere de forskellige rækker