eQui: Problem mit SQL-Abfrage MAX()

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

  1. Hello,

    zunächst: über welches DBMS reden wir?

    UPDATE erwachsene

    SET erwachsene.IDENT = '$ident'
    WHERE erwachsene.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"
    
  2. 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'
    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?  
      
    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

    1. Hallo Ingrid,

      1. 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