hambam66: Update mit Subselect Fehler 1093

Hallo,

ich möchte in meiner Tabelle, den aktuellsten Eintrag zu einem bestimmten Schlüssel ändern, es kann sich dabei aber um mehrere Datensätze handeln, weil es noch einen zweiten Schlüssel gibt.
Meine Vorstellung war ein Update mit Subquery:

UPDATE  tablle A
  SET     feld = 'bla bla'
  WHERE   schluessel1 = 'xyz'
    and   timestamp  = (SELECT MAX(B.timestamp)
                        FROM tabelle B
                        WHERE A.schluessel1 = B.schluessel1
                          AND A.schluessel2 = B.schluessel2)

MYSQL mag aber keine Updates, bei denen im Subselect die selbe Tabelle verwendet wird.

Hat jemand noch eine elegantere Lösung, als sich mit
  SELECT  schluessel2, timestamp
  FROM    tablle A
  WHERE   schluessel1 = 'xyz'
    and   timestamp  = (SELECT MAX(B.timestamp)
                        FROM tabelle B
                        WHERE A.schluessel1 = B.schluessel1
                          AND A.schluessel2 = B.schluessel2)

alle schluessel2 mit den dazugehörigen timestamp zu holen und anschliessend den
   UPDATE tabelle
   WHERE   schluessel1= 'xyz'
     AND   schluessel2= 'schluessel2 aus query1'
     and   timestamp = 'timestamp aus query1'
für alle schluessel2 durchzuführen.

Danke für Eure Hilfe

hambam66

  1. echo $begrüßung;

    ich möchte in meiner Tabelle, den aktuellsten Eintrag zu einem bestimmten Schlüssel ändern, es kann sich dabei aber um mehrere Datensätze handeln, weil es noch einen zweiten Schlüssel gibt.
    MYSQL mag aber keine Updates, bei denen im Subselect die selbe Tabelle verwendet wird.
    Hat jemand noch eine elegantere Lösung, [...]

    Ja, Matt Ryan am 16. Februar 2005 in den Userkommentaren zum Handbucheintrag von UPDATE.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      ich möchte in meiner Tabelle, den aktuellsten Eintrag zu einem bestimmten Schlüssel ändern, es kann sich dabei aber um mehrere Datensätze handeln, weil es noch einen zweiten Schlüssel gibt.
      MYSQL mag aber keine Updates, bei denen im Subselect die selbe Tabelle verwendet wird.
      Hat jemand noch eine elegantere Lösung, [...]

      Ja, Matt Ryan am 16. Februar 2005 in den Userkommentaren zum Handbucheintrag von UPDATE.

      Sorry, aber das Limit = 1 hilft mir nicht weiter, weil ich ja eine unbekannte Anzahl von zweiten Schlüsselargumenten in der Tabelle habe.
      Aber trotzdem Danke.

      echo "$verabschiedung $name";

      1. echo $begrüßung;

        Sorry, aber das Limit = 1 hilft mir nicht weiter, weil ich ja eine unbekannte Anzahl von zweiten Schlüsselargumenten in der Tabelle habe.

        Das heißt also, dass es die Kombination aus schluessel1 und schluessel2 und timestamp mehrfach geben kann? Wenn ja, dann kenne ich keine andere Lösung außer Subquery, das ja nicht geht, oder die von dir schon vorgenommene Aufteilung in mehrere Statements. Möglicherweise können dir User-Defined Variables helfen, das Ergebnis der ersten Abfrage auf dem Server zu belassen.

        echo "$verabschiedung $name";