MySQL Abfrage liefert falsche Ergebnisse



  • Hallo,

    ich habe eine Abfrage mit nachfolgendem Code welche leider falsche Ergebnisse liefert. Das Problem ist, dass auch Datensätze welche vom TYP 'Wettterminal' sind im Ergebnis auftauchen. Meiner Meinung nach ist die Syntax korrekt, falls jemand ein Fehler sieht unbedingt melden.

    Hier mein Code:

    select * from geraeteverwaltung where nr_kd = '10000' or nr_kd_abrechnung = '10000' and typ = 'geldspieler' or 'unterhaltungsautomat' order by snnr
    

    Liebe Grüsse

    Maik



  • Dein wheregedöns ist wohl nicht so formuliert wie du es beabhsichtigt hast.
    Nach dem or versuchst du zu prüfen ob eine Zeichenkette whar ist oder nicht und den Datensatz dementsprechend anzuzeigen der nicht ,du wolltest wohl eher sowas haben:

    typ = 'geldspieler' or typ = 'unterhaltungsautomat'
    


  • Abgesehen davon solltest Du zusammengefasste OR in Klammern setzen.

    (nr_kd = '10000' or nr_kd_abrechnung = '10000') and  (typ = 'geldspieler' or 'unterhaltungsautomat' )
    

    Aber nur wenn so beabsichtigt.



  • maikmueller schrieb:

    Hallo,

    ich habe eine Abfrage mit nachfolgendem Code welche leider falsche Ergebnisse liefert. Das Problem ist, dass auch Datensätze welche vom TYP 'Wettterminal' sind im Ergebnis auftauchen. Meiner Meinung nach ist die Syntax korrekt, falls jemand ein Fehler sieht unbedingt melden.

    Hier mein Code:

    select * from geraeteverwaltung where nr_kd = '10000' or nr_kd_abrechnung = '10000' and typ = 'geldspieler' or 'unterhaltungsautomat' order by snnr
    

    Liebe Grüsse

    Maik

    And hat eine höhere Priorität, daher wird die Bedingung so interpretiert:

    nr_kd = '10000' or (nr_kd_abrechnung = '10000' and typ = 'geldspieler') or 'unterhaltungsautomat'
    

    Offensichtlich ist mysql darüber hinaus noch so tolerant, dass es die Abfrage 'unterhaltungsautomat' in einen Wahrheitwert übersetzt und es als wahr ansieht. Du bekommst damit dann immer alle Datensätze, da das 3. or-Prädikat immer wahr ist.


Anmelden zum Antworten