Paul: UPDATEmit mehreren WHERE

Hi,

besteht irgendiwe die Möglichkeit eines UPDATE befehls mit mehren unterschiedlichen Where Möglichkeiten.

Beispiel:

UPDATE tabelle
SET BUCH='Gut'
WHERE
Author = 'Danny' OR
Author = 'Michael' OR
Author = 'George'
ELSE
WHERE
Author='Hans'
SET BUCh ='schlech'
...

Also eine Art Fallunterscheidung. Wenn der so heist, dann Update so, andernfalss so,  und so weiter.

  1. yo,

    besteht irgendiwe die Möglichkeit eines UPDATE befehls mit mehren unterschiedlichen Where Möglichkeiten.

    pro Update Befehle kann es nur eine WHERE klausel geben. Allerdings können unterabfragen eine eigene WHERE klausel besitzen.

    was du aber machen willst ist, nicht in der WHERE klausel eine unterscheidung zu treffen, sondern in der SET klausel. Auch dort geht es, IF oder CASE sind dazu geeignete mittel. in der WHERE klausel nimmst du alle Datensätze rein, die du updaten willst, in der SET klausel bringst du die Unterscheidungslogik mit CASE oder IF rein, die du haben willst.

    UPDATE tabelle SET buch = IF(author = 'Hans', 'schlecht', 'Gut')
    WHERE Author IN ('Danny', 'Michael', 'George', 'Hans')
    ;

    je nach Logik, die du implementieren willst, musst du die Anweisung entsprechend verändern.

    btw,. du brauchst nicht für jede Zusatzfrage einen neuen Beitrag aufmachem oder deinen Bruder posten lassen.

    Ilja

    1. Danke dir für deine Geduld.

      Könntest du mir für den CASE Fall bitte mal ein Beispiel geben, da ich in meiner Tabelle ungefähr 20 werte prüfen muss.

      Beispiel:

      CASE(author = 'Hans', 'Schlecht',NULL) ,
      CASE(author = 'Dieter', 'Normal',NULL.)
      ....

      Vielen Dank im voraus.

      1. yo,

        Könntest du mir für den CASE Fall bitte mal ein Beispiel geben, da ich in meiner Tabelle ungefähr 20 werte prüfen muss.

        CASE author
            WHEN 'Hans' THEN 'Schlecht'
            WHEN 'Dieter' THEN 'Normal'
            ELSE 'alle_anderen'
        END CASE

        Ilja

        1. Also müsstet die Syntax grundsätzlichfolgendermaßen lauten:

          UPDATE  <<tabelle>>
          SET <<Spalte zu updaten>> =
          CASE <<Spalte des Case>>
              WHEN "Fall1" THEN "Ergebnis"
              ELSE "Ergebnis"
          END CASE

          WHERE <<Spalte des Case>>
          IN (
          <<alle Fälle>
          )

          Ist vielleicht ein wenig unglücklich formuliert, aber irgendiwe klaptt das in dieser form nicht.
          Bekomme FM:

          You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE

          1. yo,

            wenn du schon einen syntaxfehler bekommst, was hälst du von der idee, auch die genaue anweisung uns zu sagen, welche die fehlermeldung verursacht hat, oder gefällt dir die blaue schrift hier nicht, dass du mit informationen sparen willst ?

            Ilja

            1. Sorry ;)

              SQL Befehl:

              UPDATE t_buch
              SET buch=
              CASE author
                  WHEN 'Hans' THEN 'GUT
                  WHEN 'Werner' THEN 'Schlecht'
                  ELSE 'normal'
              END CASE

              WHERE author
              IN (
              'GUT'
              'Schlecht'
              'normal'
              )

              Fehlermeldung:

              You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE

              WHERE author
              IN (
              'GUT'
              'Schlecht'
              'normal'
              ) at line 7

              1. yo,

                der fehler liegt wohl in den fehlenden kommas

                WHERE author IN ('GUT', 'Schlecht', 'normal')

                Ilja

              2. echo $begrüßung;

                END CASE
                You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE

                Vergleich doch mal deinen Versuch mit der im Handbuch angegebenen Syntax.

                echo "$verabschiedung $name";