dedlfix: MySQL Subquery

Beitrag lesen

Tach!

Wenn ich die Query so abfrage, bekomme ich einen Fehler, weil er "lastdate" nicht kennt.

SELECT (SELECT date FROM history WHERE history.artikel=artikel.id LIMIT 1) as lastdate, DATEDIFF(lastdate,'2017-06-21') FROM artikel WHERE id='10'

Ja, die Aliases werden erst nach dem Berechnen hinzugefügt, und meines Wissens nach ist auch die Reihenfolge der Berechnungen der Feldwerte in der SELECT-Klausel nicht garantiert.

Mir fallen da noch User Defined Variables ein, aber die dürften an demselben Problem leiden, obwohl sie dir keinen Syntaxfehler liefern. Beachte dazu die Aussagen im Handbuch.

SELECT (SELECT date FROM history WHERE history.artikel=artikel.id LIMIT 1) as lastdate, DATEDIFF((SELECT date FROM history WHERE history.artikel=artikel.id LIMIT 1),'2017-06-21') FROM artikel WHERE id='10'

Eine Lösung wäre, die Query erstmal ohne den DATEDIFF-Teil zu notieren. Dann erstellst du eine zweite Query, die diese Query als Subquery in den FROM-Teil bekommt. (Ja, das ergibt verschachtelte Subquerys.) Im Select-Teil kannst du dann einerseits lastdate aufführen, als auch in einem zweiten Feld deine Berechnung damit durchführen.

Anmerkung: Wenn du da lediglich ein LIMIT ohne eine Sortierung verwendest, dann ist nicht garantiert, dass du jedes Mal denselben Wert bekommst, sondern den, der zufälligerweise als erstes steht.

dedlfix.