Reputation: 693
Why this query returns results where companyVisible is 0, even I am asking only for companies where companyVisible has value of 1?
SELECT c.companyID, c.companyDescription , c.companyName ,c.copmanyDrastiriotita, c.companyVisible
FROM company c
WHERE c.companyVisible = 1
AND c.companyDescription LIKE '%Keyword%'
OR c.companyName LIKE '%Keyword%'
OR c.copmanyDrastiriotita LIKE '%Keyword%'
Upvotes: 1
Views: 55
Reputation: 57023
Using disjunctive normal form:
SELECT c.companyID,
c.companyDescription, c.companyName, c.copmanyDrastiriotita,
c.companyVisible
FROM company c
WHERE ( c.companyVisible = 1 AND c.companyName LIKE '%Keyword%' )
OR ( c.companyVisible = 1 AND c.companyDescription LIKE '%Keyword%' )
OR ( c.companyVisible = 1 AND c.copmanyDrastiriotita LIKE '%Keyword%' )
Using primitive operators (c3
could be a VIEW
):
SELECT c2.companyID,
c2.companyDescription, c2.companyName, c2.copmanyDrastiriotita,
c2.companyVisible
FROM company c2, (
SELECT c1.companyID, c1.companyName AS text_to_search
FROM company c1
UNION
SELECT c.companyID, c.companyDescription AS text_to_search
FROM company c1
UNION
SELECT c1.companyID, c1.copmanyDrastiriotita AS text_to_search
FROM company c1
) AS c3 ( companyID, text_to_search )
WHERE c2.companyVisible = 1
AND c3.text_to_search LIKE '%Keyword%'
Upvotes: 0
Reputation: 2584
Because of OR clause
Apply brackets around AND ...OR
clause
Use this
SELECT c.companyID, c.companyDescription , c.companyName ,c.copmanyDrastiriotita, c.companyVisible
FROM company c
WHERE c.companyVisible = 1
AND (c.companyDescription LIKE '%Keyword%'
OR c.companyName LIKE '%Keyword%'
OR c.copmanyDrastiriotita LIKE '%Keyword%')
Upvotes: 1
Reputation: 44766
AND
goes before OR
, so you need to add parentheses.
SELECT c.companyID, c.companyDescription , c.companyName ,c.copmanyDrastiriotita, c.companyVisible
FROM company c
WHERE c.companyVisible = 1
AND (c.companyDescription LIKE '%Keyword%'
OR c.companyName LIKE '%Keyword%'
OR c.copmanyDrastiriotita LIKE '%Keyword%')
Upvotes: 2