einfaches SELECT Statement
Nemo
- datenbank
0 Axel Richter0 Nemo
0 Tobias Kloth0 Nemo
Hallo Liebe Gemeinde!
Es geht um diese einfache Anfrage:
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
Dieses einfache Select Anweisung würde bei MYSQL funktionieren, bei einer ACCESS DB aber nicht. Die Befehle sind eigentlich gleich und laut Anleitung sollte sie gehen, aber in diesem Fall werden nur alle Daten ausgelesen die CDNummer = 10 oder 9 oder 6 oder 4 oder 3 oder 2 oder 1 haben.
Sprich die 2 LIKE Anweisungen nach dem AND werden ignoriert.
Kann das irgendjemand anders formulieren, sodass es geht?
Danke für die Mühe!
Hallo,
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
Dieses einfache Select Anweisung würde bei MYSQL funktionieren, bei einer ACCESS DB aber nicht.
Kann das irgendjemand anders formulieren, sodass es geht?
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '*logo*' OR Dateiname LIKE '*logo*'
viele Grüße ;-))
Axel
Danke ich werd mal beides ausprobieren, wobei ich sagen muß, für sich und einzeln genommen haben beide Anweisungen funktioniert. Sprich ich zweifle ob das ändern von % auf * etwas bringt, da es mit % auch schon geklappt hat.
Hallo,
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
SELECT UID FROM Archiv WHERE CDNummer IN (10,9,6,4,3,2,1) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
wäre kürzer :-) (ich weiß aber nicht, ob Acess das auch versteht)
Sprich die 2 LIKE Anweisungen nach dem AND werden ignoriert.
ich kenn mich mit Access zwar nicht aus, aber du könntest mal versuchen das was vor und nach dem AND steht jeweils in einen Satz Klammern zu setzen.
Grüße aus Nürnberg
Tobias
Hallo,
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
SELECT UID FROM Archiv WHERE CDNummer IN (10,9,6,4,3,2,1) AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
wäre kürzer :-)
brächte aber nicht das selbe Ergebnis ;-))
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1 AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
ist wegen der höherwertigen Operatorrangfolge von AND gegenüber OR wie
SELECT UID FROM Archiv WHERE CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR
(CDNummer=1 AND Dateipfad LIKE '%logo%')
OR Dateiname LIKE '%logo%'
zu lesen.
Dein Vorschlag entspräche:
SELECT UID FROM Archiv WHERE
(CDNummer=10 OR CDNummer=9 OR CDNummer=6 OR CDNummer=4 OR CDNummer=3 OR CDNummer=2 OR CDNummer=1)
AND Dateipfad LIKE '%logo%' OR Dateiname LIKE '%logo%'
(ich weiß aber nicht, ob Access das auch versteht)
SELECT UID FROM Archiv WHERE CDNummer IN (10,9,6,4,3,2,1) AND Dateipfad LIKE '*logo*' OR Dateiname LIKE '*logo*'
würde es verstehen ;-))
viele Grüße
Axel
Hallo Axel,
ist wegen der höherwertigen Operatorrangfolge von AND gegenüber OR wie
*uups* du hast natürlich recht. Welcher Operator jetzt "stärker" ist, kann ich mir nie merken - aber ich behaupte mal, dass Nemo das so wie ich vorgeschlagen haben, haben will ;-)
(ich weiß aber nicht, ob Access das auch versteht)
SELECT UID FROM Archiv WHERE CDNummer IN (10,9,6,4,3,2,1) AND Dateipfad LIKE '*logo*' OR Dateiname LIKE '*logo*'
würde es verstehen ;-))
danke - jetzt weiß ich wenigstens, dass man in Access * statt % verwenden muss.
Grüße aus Nürnberg
Tobias
Hi,
_in_ Access *
über ODBC bzw. JET-OLEDB bleibt es bei %
Gruß, Frank
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.
Nochwas:
%logo% != *logo*
Ich weiß zwar nicht wo der unterschied liegt, aber *logo* liefert 0 Ergebnisse.
(Ps: Ich kommuniziere via Macromedia Flash und DB Erweiterungen mit einer Access 2000 Datenbank. Vielleicht liegts an der ungewöhnlichen Konstellation)
Vielen Dank für die Hilfe!
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