Announcement

Collapse
No announcement yet.

LEAST () wert anstelle von argument!? Wie gehts?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LEAST () wert anstelle von argument!? Wie gehts?

    Hallo,
    ich habe ein Problem mit einer Mysql-Abfrage.
    Ich habe Spalte 1, 2 und 3 - den mit dem niedrigsten Wert möchte ich in spalte 4 schreiben.

    Code:
    update `wawimaster`.`artikel` set `bestek` = LEAST('tanalaek','preiscl','preisdd');
    Dieses war mein erster Lösungsansatz. Jetzt schreibt er mir allerdings anstelle der einzelnen werte nur den namen der spalte mit dem geringsten wert in die spalte.
    Also anstelle von z.B. 10.00 steht dort preiscl.
    Welche Funktion brauche ich um die Werte in das Feld zu bekommen?

    Danke und Gruß

    Marco

  • #2
    [highlight=sql]
    UPDATE wawimaster.artikel
    SET bestek =
    (
    SELECT MIN(Zahl)
    FROM
    (
    SELECT MIN(tanalaek) as Zahl
    FROM wawimaster.artikel
    UNION ALL
    SELECT MIN(preiscl) as Zahl
    FROM wawimaster.artikel
    UNION ALL
    SELECT MIN(preisdd) as Zahl
    FROM wawimaster.artikel
    )
    )[/highlight]

    War jetzt sone Überlegung ohne zu testen

    Comment


    • #3
      Ach ich glaub jetzt hab ichs erst richtig verstanden... du möchtest aus der jeweiligen Zeile den Minimalwert haben... nicht von der ganzen Tabelle:

      [highlight=sql]
      UPDATE wawimaster.artikel a
      SET bestek =
      (
      SELECT LEAST(tanalaek,preiscl,preisdd)
      FROM wawimaster.artikel b
      WHERE a.Id = b.Id
      )
      [/highlight]

      Auch wieder rein ausm Kopf, also besser nochmal testen bevor du das auf die DB loslässt *g*

      Comment


      • #4
        Hallo,
        danke für die schnelle Antwort.
        Ja es geht mir darum den kleinsten wert 3er spalten in eine vierte zu schreiben und das pro zeile.

        Allerdings bekomme ich folgende Fehlermeldung:

        #1093 - You can't specify target table 'a' for update in FROM clause

        Ich befasse mich leider erst seit kurzem mit mysql-abfragen.

        Gruß
        Marco

        Comment


        • #5
          Hallo,

          warum nicht einfach so:
          [highlight=sql]
          update wawimaster.artikel set
          bestek = LEAST(tanalaek, preiscl, preisdd);
          [/highlight]

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,
            das habe ich auch schon versucht, allerdings werden da keine werte in bestek gesetzt bzw. der wert dort wird immer auf NULL gesetzt

            Viele Grüße
            Marco

            Comment


            • #7
              Originally posted by marquito View Post
              ...bzw. der wert dort wird immer auf NULL gesetzt
              Dann ist sicher einer der Werte tanalaek, preiscl, preisdd NULL.
              Before MySQL 5.0.13, LEAST() returns NULL only if all arguments are NULL. As of 5.0.13, it returns NULL if any argument is NULL.
              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Wenn Werte NULL sein können, dann musst Du diese wohl erstmal in einen normalen Wert umwandeln.
                In Oracle gibts dafür das NVL Kommando. Sieht dann so aus:

                Code:
                NVL(tanalaek,0)
                Heisst: Wenn die Spalte tanalaek NULL ist, dann verwende anstatt der NULL eine 0.
                Hintergrund: In einer Datenbank kann mit NULL nicht gerechnet und verglichen werden. Alle Ausdrücke die ein NULL verwenden geben wieder ein NULL zurück.

                Leider weiss ich nicht wie die entsprechende Funtkion in MySQL heisst.

                OK^^ Falk hat sich der Antwort auch schon angenommen Aus beiden kannst Dir mit Sicherheit was funktionierendes basteln

                Comment


                • #9
                  Originally posted by fanderlf View Post
                  ...Leider weiss ich nicht wie die entsprechende Funtkion in MySQL heisst.
                  In MySQL gibt es dafür ISNULL().

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Hallo,
                    ich bins nochmal - komme gerade nicht so recht weiter. Also meine erste Vergleichs-Abfrage funktioniert ja soweit. Dieses Abfrage ist sogar recht brauchbar für mich und möchte sie daher gerne behalten.

                    Ich habe überlegt ich könnte es mit einer extraabfrage lösen - leider habe ich hier wohl einen Fehler drin:

                    update `wawimaster`.`artikel` set `bek` IF(bestek='tanalaek',tanalaek,'');

                    Möchte also wenn dort tanalaek als eintrag steht in die spalte bek der wert der spalte tanalaek geschrieben wird.

                    Comment


                    • #11
                      Problem gelöst.

                      Hallo,
                      da ich das andere Feld auch gebrauchen kann, habe ich die ganze Sache jetzt mit einem anderen Workaround gelöst.

                      Code:
                      update `wawimaster`.`artikel` set `bestek` = LEAST('tanalaek','preiscl','preisdd');
                      update `wawimaster`.`artikel` set `bek` = tanalaek WHERE bestek ='tanalaek';
                      update `wawimaster`.`artikel` set `bek` = preisdd WHERE bestek ='preisdd';
                      update `wawimaster`.`artikel` set `bek` = preiscl WHERE bestek ='preiscl';
                      Nochmals Danke für die schnellen Lösungsvorschläge!

                      Gruß
                      Marco

                      Comment


                      • #12
                        Leider funktioniert die Sache doch nicht und es kommt nur Müll dabei raus, eine neue Iddee funktioniert auch nicht - bin gerade am verzweifeln

                        update `wawimaster`.`artikel` set `bestek` = 'tanala' WHERE tanalaek < preiscl AND tanalaek < preisdd;
                        update `wawimaster`.`artikel` set `bestek` = 'diskdirect' WHERE preisdd < preiscl AND preisdd < tanalaek;
                        update `wawimaster`.`artikel` set `bestek` = 'comline' WHERE preiscl < preisdd AND preiscl < tanalaek;
                        update `wawimaster`.`artikel` set `bek` = tanalaek WHERE bestek ='tanala';
                        update `wawimaster`.`artikel` set `bek` = preisdd WHERE bestek ='diskdirect';
                        update `wawimaster`.`artikel` set `bek` = preiscl WHERE bestek ='comline';

                        Comment


                        • #13
                          Hallo,

                          LEAST('tanalaek','preiscl','preisdd') ist IMMER 'preisdd'!
                          Wenn du auf den Feldinhalt prüfen willst, solltest du das nicht in Hochkomma schreiben, da es sonst einfach als String interpretiert wird.

                          Gruß Falk
                          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                          Comment


                          • #14
                            Hallo Falk,
                            Ja, ich habe es gemerkt - ist noch alles ziemlich verwirrend...
                            Wird ein anstrengendes Wochenende.
                            Als nächstes Problem habe ich jetzt gemerkt daß die Abfragen teilweise komische Ergebnisse liefern da ein Lieferant mit die Werte in der Form 10,10
                            liefert und ein anderer 10.10
                            Wird einiges an Aufwand brauchen das alles unter einem Hut zu bekommen.

                            Viele Grüße

                            Marco

                            Comment

                            Working...
                            X