joiner: Multiupdates MySql >= 5.0.12

Beitrag lesen

Ich habe bisher ( leider recht oft ) Updates verwendet, die mit Hilfe eines JOINS eine Tabelle unter Berücksichtigung ALLER Zeile einer anderen ( auch mehrfach ) aktualisiert haben.

Folgendes Beispiel

CREATE TEMPORARY TABLE tmpDst
   ( Id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
     Txt TEXT NOT NULL );

CREATE TEMPORARY TABLE tmpSrc
   ( PId SMALLINT NOT NULL,
     Nr SMALLINT NOT NULL,
     Str Text NOT NULL );

INSERT INTO tmpDst
   ( Id, Txt )
VALUES
   ( 1, '' ),
   ( 2, '' );

INSERT INTO tmpSrc
   ( PId, Nr, Str )
VALUES
   ( 1, 1, 'Eins' ),
   ( 2, 2, 'Zwei' ),
   ( 1, 3, 'Drei' ),
   ( 2, 4, 'Vier' ),
   ( 1, 5, 'Fünf' );

Und nu kommts:

UPDATE tmpDst as d
 CROSS JOIN tmpSrc as s
    ON s.PId = d.Id
   SET d.Txt = CONCAT( d.Txt, s.Str )
 WHERE 1;

SELECT * FROM tmpDst;

hat demnach folgendes Ergebnis geliefert:

Id  Txt
--------
1   EinsDreiFünf
2   ZweiVier

Seit MySql 5.0.12 verweist MySql in einem Nebensatz Ihrer Ref. nun darauf, dass das nicht sql2003 konform ist und die entsprechenden Abfragen umgeschrieben werden müssen.

Ergebnis ab 5.0.12:
1   Eins
2   Zwei
fertig, toll

Gibt's eine Möglichkeit, den verblödeten Optimizer davon abzuhalten, die restlichen Zeile außen vor zu lassen?

Hat da schon Jemand eine Lösung?