Hallo,
SELECT ID, Status
FROM table
WHERE Name LIKE "%Franz%"
OR Name2 LIKE "%Franz%"
AND Status LIKE "%AB%"
AND geloescht !=1
Ich erhalte in der Ergebnismenge auch Treffer mit Status BB, BC und BD.
Woran liegt das?
vermutlich an fehlenden Klammern und der von Dir nicht berücksichtigten Operatorrangfolge. Dein Statement wird wie folgt verarbeitet:
``~~~sql
SELECT
ID,
Status
FROM
tabelle
WHERE
Name LIKE '%Franz%' -- es ist eine sehr gute Idee, Zeichenketten in
-- SQL immer in einfache Anführungszeichen zu
-- setzen. Viele SQL-Dialekte mögen keine doppelten,
-- inklusive MySQL im ANSI-Mode
OR (
Name2 LIKE '%Franz%'
AND Status LIKE '%AB%'
AND geloescht !=1
)
Ich vermute allerdings, dass Du statt dieser impliziten Klammerung eher folgende explizite Klammerung haben möchtest.
~~~sql
SELECT
ID,
Status
FROM
tabelle
WHERE (
Name LIKE '%Franz%'
OR Name2 LIKE '%Franz%'
)
AND Status LIKE '%AB%'
AND geloescht !=1
haben möchtest, d.h. dass Franz in Name oder Name2 vorkommen muss, der Status AB enthalten soll und gelöscht ungleich 1 sein soll.
Freundliche Grüße
Vinzenz