Vinzenz Mai: mysql5 - Query will nicht

Beitrag lesen

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