dedlfix: Multiupdates MySql >= 5.0.12

Beitrag lesen

echo $begrüßung;

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

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.

Schon wäre es gewesen, wenn du die Stelle verlinkt hättest, denn so habe ich diese Aussage nicht finden können. Und da meist recht viel Text auf einer Handbuchseite steht, empfiehlt es sich zumindest den Anfang des betreffenden Satzes zu zitieren.

Stattdessen fand ich die Aussage, dass in einem Multiple-Table-Update kein ORDER BY verwendet werden kann[1] und die Reihenfolge der Zuweisungen somit beliebig sein kann[2]. Du bekämst also mit deinem Statement unvorhersagbare Ergebnisse.

http://dev.mysql.com/doc/refman/5.0/en/update.html:
[1] "... you cannot use ORDER BY or LIMIT with a multiple-table UPDATE."
[2] "For multiple-table updates, there is no guarantee that assignments are carried out in any particular order."[3]
[3] Es kann sein, dass ich diesen Satz missverstanden habe, und er nicht auf diese Situation anwendbar ist.

Hat da schon Jemand eine Lösung?

GROUP_CONCAT() zusammen mit einem Subselect kann helfen.

UPDATE tmpDst as d
 CROSS JOIN
  (SELECT PId, GROUP_CONCAT(Str ORDER BY Nr SEPARATOR '') gc FROM tmpSrc GROUP BY PId) as s
 ON s.PId = d.Id
SET d.Txt = s.gc;

Das brachte mir zumindest das gewünschte Ergebnis.

echo "$verabschiedung $name";