Roland: sql befehl liefert zuviele Datensätze...

Hallo,ich scheitere an einem Select-Befehl,bei dem mir bislang schlichtweg zuviele Daten ausgegeben werden.Der Syntax muss also falsch sein.

Aber zunächst mal die Selectanweisung:
"SELECT Label,Titel,medium FROM db WHERE Label ='Decca' AND medium='1' or medium='2' or medium='3' ORDER BY Titel ASC"

Gewollt ist eigentlich folgendes:
Ich möchte alle Datensätze des Label "Decca",in denen das Medium entweder den Wert 1,2 oder 3 hat.

Wie muss ich den Select abändern,damit es klappt?

  1. Der Syntax muss also falsch sein.

    DIE syntax ist dann falsch, wenn du eine fehlermeldung bez. eines syntaxfehlers erhältst - erhältst du keine derart lautende meldung, hst ein fehler sogut wie ausgeschlossen

    du hast einen logischen fehler

    Aber zunächst mal die Selectanweisung:
    "SELECT Label,Titel,medium FROM db WHERE Label ='Decca' AND medium='1' or medium='2' or medium='3' ORDER BY Titel ASC"

    Gewollt ist eigentlich folgendes:
    Ich möchte alle Datensätze des Label "Decca",in denen das Medium entweder den Wert 1,2 oder 3 hat.

    Wie muss ich den Select abändern,damit es klappt?

    füge füge folgende beiden zeichen an geeigneter stelle hinzu: ( und )

    1. medium='1' or medium='2' or medium='3'

      im übrigen solltest du zahlen als zahlen behandeln (sofern medium ein feld ist, welches nur zahlen - zb ganzzahlen - beinhalten darf

      1. im übrigen solltest du zahlen als zahlen behandeln (sofern medium ein feld ist, welches nur zahlen - zb ganzzahlen - beinhalten darf

        Das sind keine Zahlen sondern Strings als Kennziffern,vielleicht etwas blöd gedacht von mir...
        Aber wie lautet nun der Syntax?

        Ich habs so versucht:
        SELECT Label,Titel,medium FROM db WHERE Label ='Decca' AND (medium='1' or medium='2' or medium='3') ORDER BY Titel ASC

        Da wirds zwar übersichtlicher,aber immer noch zuviele Resultate...

        1. Ich habs so versucht:
          SELECT Label,Titel,medium FROM db WHERE Label ='Decca' AND (medium='1' or medium='2' or medium='3') ORDER BY Titel ASC

          Da wirds zwar übersichtlicher,aber immer noch zuviele Resultate...

          das entspricht aber nun dem von dir geforderten

          alles mit label decca UND (medium 1, 2 oder 3)

          alternativ kannst du statt dem or, or ... auch in medium IN(1, 2, 3) verwenden, der effekt ist aber der selbe

          1. Ich kann Entwarnung geben.Ein paar mal reload mit dem browser haben auch gereicht.Vielen Dank für die Hilfe!

            1. Ich kann Entwarnung geben.Ein paar mal reload mit dem browser haben auch gereicht.Vielen Dank für die Hilfe!

              na wunderbar:
              als html-autor, programmierer oder sonstwas kann man sich am besten mit dem browser-cache verarschen - oder mit entwicklungs- und live-umgebung :D

              1. als html-autor, programmierer oder sonstwas kann man sich am besten mit dem browser-cache verarschen - oder mit entwicklungs- und live-umgebung :D

                Ja,da ist was wahres dran...:)

    2. Ok, der Syntax ist richtig,erfüllt aber nicht den Zweck.

      Leider werde ich aus deinem Posting nicht schlau:

      füge füge folgende beiden zeichen an geeigneter stelle hinzu: ( und )

      Wie müßte denn der Syntax für meine Absicht lauten?

      1. Ok, der Syntax ist richtig,erfüllt aber nicht den Zweck.

        DIE syntax

        Wie müßte denn der Syntax für meine Absicht lauten?

        selber denken macht schlau ;)

        sql-operatoren funktionieren ähnlich wie in der mathematik - du wirst es nicht glauben, sie folgen sogar eigenen gesetzmäßigkeiten :)

        in der mathematik ist es "klammer vor punkt vor strich", alles innerhalb einer klammer wird ausgerechnet bevor eine punktrechnung durchgeführt wird usw

        in mysql zählt zuerst eine klammer, dann der AND-operator und später erst OR

        in deinem fall ist AND höher gewichtet als OR, was in deinem fall zu einem ungewünschen ergebnis führt

        1. sql-operatoren funktionieren ähnlich wie in der mathematik - du wirst es nicht glauben, sie folgen sogar eigenen gesetzmäßigkeiten :)

          in der mathematik ist es "klammer vor punkt vor strich", alles innerhalb einer klammer wird ausgerechnet bevor eine punktrechnung durchgeführt wird usw

          in mysql zählt zuerst eine klammer, dann der AND-operator und später erst OR

          in deinem fall ist AND höher gewichtet als OR, was in deinem fall zu einem ungewünschen ergebnis führt

          Wenn ich allein drauf kommen würde,hätte ich wohl kaum um Hilfe gebeten.
          Ich habe bislang nur mit simplen select-Anweisungen gearbeitet-wobei diese Anweisung für manches Matheass hier auch simpel sein mag.
          Ich komme schlichtweg nicht drauf wo ich was in Klammern setzen muss!

          1. Wenn ich allein drauf kommen würde,hätte ich wohl kaum um Hilfe gebeten.

            genau darum gebe ich dir die nötigen werkzeuge, um das ganze in zukunft selbst lösen zu können

            Ich habe bislang nur mit simplen select-Anweisungen gearbeitet-wobei diese Anweisung für manches Matheass hier auch simpel sein mag.

            das ist eine simple abfrage - AND oder OR sind noch nicht wirklich kompliziert, die beiden operatoren sind das wichtigste überhaupt, wenns ums programmieren oder um themenverwandte bereiche geht - bei NAND, XOR oder XNOR darfst du dich beklagen, dass es zu kompliziert wird - hier steigt man gerne mal aus, aber die anderen beiden müssen einfach "flutschen"

            Ich komme schlichtweg nicht drauf wo ich was in Klammern setzen muss!

            dein versuch hat ansich gepasst, nur deine vorstellung vom ergebnis stimmt nicht - also überdenke die logik nochmal und bilde sie dann ab - nimm zur not ein stück papier zu hilfe

            btw: bitte nicht mehr hier weiterdiskutieren sondern im anderen ast - sonst wirds unübersichtlich ;)

  2. Hallo,

    na dann versuch's doch mal mit Klammern ( ) um die richtigen Kriterien.

    Ciao, Frank