简体   繁体   English

sql查询返回错误的结果

[英]sql query return wrong results

Why this query returns results where companyVisible is 0, even I am asking only for companies where companyVisible has value of 1? 为什么这个查询返回的结果是companyVisible为0,即使我只询问companyVisible值为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%'

AND goes before OR , so you need to add parentheses. 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%')

Because of OR clause 因为OR子句

Apply brackets around AND ...OR clause AND ...OR子句周围应用括号

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

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 ): 使用原始运算符( 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%'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM