Axel Richter: einfaches SELECT Statement

Beitrag lesen

Hallo,

Ok ich glaub ich habs:

"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND (Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%')"

liefert korrekte Ergebnisse.

"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'"

war auch schon ok, allerdings waren IMMER auch die Resultate von CDNummern größer 9 dabei. Sprich CDNummer 10 und 11, obwohl sie nicht im Statement waren.

Doch, waren sie. AND hat eine höhere Operatorrangfolge als OR, genau wie * eine höhere Operatorrangfolge hat als +. Genau so, wie Punktrechnung vor Strichrechnung, geht also AND von OR. Dein:

"SELECT UID FROM Archiv WHERE CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'"

ist also ein:

SELECT UID FROM Archiv WHERE
(CDNummer IN (3, 9, 2) AND Dateipfad LIKE '%logo%')
OR Dateiname LIKE '%logo%'

beinhaltet also alle Datensätze, bei denen Dateiname LIKE '%logo%' ist, unabhängig von CDNummer und Dateipfad.

Nochwas:
%logo% != *logo*
Ich weiß zwar nicht wo der unterschied liegt, aber *logo* liefert 0 Ergebnisse.

Der Wildcard * gilt für MS Access DAO. Der Wildcard % gilt für ADO bzw. Jet OLE DB. Offensichtlich greift Deine Konstellation via ADO auf Access zu.

viele Grüße

Axel