Klaus: Select WHERE abfrage mir OR, hat Probleme

Eigentlich müsste es funktionieren, aber irgendwas klappt nicht:
-----------------------------------------------------------------------
SELECT id, nr, name
FROM titel
WHERE (nr = '2’ OR '175' OR ‘212’)
-----------------------------------------------------------------------
Es werden alle Einträge ausgegeben,
doch es sollen nur die ausgegeben werden die bei
 nr.  2 oder  175 oder 212
stehen.

Klaus

  1. Moin,


    SELECT id, nr, name
    FROM titel
    WHERE (nr = '2’ OR '175' OR ‘212’)

    Es kommt darauf an, welche Datenbank du nutzt. MySQL bietet folgendes:

    SELECT id, nr, name FROM titel WHERE nr IN (2, 175, 212)

    Grüße Marco

  2. Hallo,

    Eigentlich müsste es funktionieren, aber irgendwas klappt nicht:

    SELECT id, nr, name
    FROM titel
    WHERE (nr = '2' OR '175' OR '212')

    Es werden alle Einträge ausgegeben,

    das ist ja auch das, was das richtige Ergebnis dieser Abfrage ist - auch wenn es von Dir nicht gewünscht ist.

    doch es sollen nur die ausgegeben werden die bei
    nr.  2 oder  175 oder 212
    stehen.

    Wenn Du das mit OR schreiben wolltest, so lautete die Bedingung:

    (nr = 2 OR nr = 175 OR nr = 212)

    im SQL-Dialekt von MySQL auch

    (nr = '2' OR nr = '175' OR nr = '212')

    Erklärung:
    OR verknüpft Ausdrücke und eine nichtleere Zeichenkette wie '175' oder auch '212' wird als wahr angesehen. Dadurch wird der gesamte Ausdruck immer wahr sein. Deswegen werden alle Datensätze zurückgeliefert.

    Die bessere und vor allem lesbarere Variante mit IN (die nicht MySQL-spezifisch ist) hat Dir Marco bereits aufgezeigt.

    Freundliche Grüße

    Vinzenz

  3. Tach!

    WHERE (nr = '2’ OR '175' OR ‘212’)

    Ein OR (AND ebenso) verbindet vollständige Bedingungen. Es erweitert keine Bedingungen um weitere Argumente.

    Es werden alle Einträge ausgegeben,

    Ja. Die erste Bedingung nr=2 passt manchmal. Die beiden anderen Zahlen (oder hier Strings) werden als eigenständige Bedingungen behandelt. Sie werden zum Auswerten in den booleschen Kontext gebracht, und da ergeben beide Strings true.

    Eine Auswahl aus mehreren Werten geht mit dem schon erwähnten IN().

    dedlfix.