2016-06-28 186 views
1

爲什麼此查詢返回companyVisible爲0的結果,即使我只要求companyVisible的值爲1的公司?sql查詢返回錯誤結果

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%' 

回答

1

由於OR子句

應用括號AND ...OR條款

使用此

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%') 
2

ANDOR之前,所以你需要添加括號。

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%') 
0

使用析取範式:

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%') 

使用原始運算符(c3可能是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%'