Problem mit SQL-Abfrage MAX()
eQui
- datenbank
2 Rouven1 Vinzenz Mai
Hallo Kollegen,
ich möchte in meiner MySQL Datenbank den Eintrag 'IDENT' im Datensatz mit der größten ID ändern. Bisher hab' ich das hier versucht:
UPDATE `erwachsene`
SET `erwachsene`.`IDENT` = '$ident'
WHERE `erwachsene`.`ID` = (SELECT MAX(`erwachsene`.`ID`)) LIMIT 1
Manchmal wird der Eintrag IDENT aber in einer Zeile geändert, die nicht die größte ID hat. woran kann das liegen?
Die Felder ID und IDENT sind beide Integer.
Viele Grüße,
eQui
Hello,
zunächst: über welches DBMS reden wir?
UPDATE erwachsene
SET
erwachsene
.IDENT
= '$ident'
WHEREerwachsene
.ID
= (SELECT MAX(erwachsene
.ID
)) LIMIT 1
das wird ausgeführt? Dem zweiten SQL-Statement fehlt die FROM-Klausel!?
Weiterhin, wenn ich mich recht erinnere, lässt MySQL kein SUBSELECT auf die Tabelle zu, die für ein UPDATE/INSERT verwendet wird - siehe [MySQL-Handbuch](http://dev.mysql.com/doc/refman/5.0/en/subqueries.html).
Könntest du dementsprechend ein paar Infos nachliefern?
MfG
Rouven
--
\-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))
Friendships are a lot like a backyard garden. We plan to tend to them, but we just always seem to put it off until next week. -- Christian Clemenson as Jerry Espenson in Boston Legal: "Patriot Acts"
Hallo,
ich möchte in meiner MySQL Datenbank den Eintrag 'IDENT' im Datensatz mit der größten ID ändern. Bisher hab' ich das hier versucht:
UPDATE erwachsene
SET
erwachsene
.IDENT
= '$ident'
WHEREerwachsene
.ID
= (SELECT MAX(erwachsene
.ID
)) LIMIT 1
> Manchmal wird der Eintrag IDENT aber in einer Zeile geändert, die nicht die größte ID hat. woran kann das liegen?
das ist bei MySQL normal :-)
1\. [siehe Rouven](https://forum.selfhtml.org/?t=184440&m=1222943)
2\. Setze bitte
`SELECT MAX(erwachsene.ID)`{:.language-sql}
ab. Was erhältst Du?
3\. Setze mal
~~~sql
SELECT
ID,
IDENT
FROM
erwachsene
WHERE
ID = (
SELECT
MAX(erwachsene.ID)
)
ab. Was erhältst Du?
Ich halte das Ergebnis zwar nicht für besonders sinnvoll oder gar logisch,
insbesondere wenn man sich das Ergebnis von 2. betrachtet.
Da Du keine ORDER BY-Klausel verwendest ist Dein Ergebnis mit 3. normal.
4. Da Du ORDER BY verwenden kannst, ist es supereinfach, den Datensatz mit
der höchsten ID upzudaten:
UPDATE
erwachsene
SET IDENT = <wert>
ORDER BY
ID
LIMIT 1
Freundliche Grüße
Vinzenz
Hallo Ingrid,
- Da Du ORDER BY verwenden kannst, ist es supereinfach, den Datensatz mit
der höchsten ID upzudaten:
poste keinen ungeprüften Code!
UPDATE
erwachsene
SET IDENT = <wert>
ORDER BY
ID
DESC -- absteigend sortiert :-)
LIMIT 1
Freundliche Grüße
Vinzenz