Select WHERE abfrage mir OR, hat Probleme
Klaus
- datenbank
1 misterunknown1 Vinzenz Mai1 dedlfix
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
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
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
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.