SQL-合并与&;或

SQL-合并与&;或,sql,sql-server,database,select,boolean-logic,Sql,Sql Server,Database,Select,Boolean Logic,我有以下代码: SELECT sdd.sd_doc_classification, sdd.sd_title, sdd.sd_desc, sdr.sd_upload_fname FROM sdoc_docs AS sdd INNER JOIN sdoc_revh AS sdr ON sdd.sd_id = sdr.sd_id WHERE (sdd.sd_title LIKE '%policy%') OR (sdd.sd_title LIKE '%

我有以下代码:

SELECT sdd.sd_doc_classification,
       sdd.sd_title,
       sdd.sd_desc,
       sdr.sd_upload_fname
FROM sdoc_docs AS sdd
INNER JOIN sdoc_revh AS sdr ON sdd.sd_id = sdr.sd_id
WHERE (sdd.sd_title LIKE '%policy%')
    OR (sdd.sd_title LIKE '%guideline%')
    AND (sdd.sd_doc_classification NOT LIKE '%\Trust Wide Policies & Guidelines\%')
但是,添加“
或(sdd.sd_title,如“%guideline%”)
”会破坏它,该语句现在返回的值
'%\Trust-Wide-Policies&Guidelines\%
类似

删除上述示例后,代码将按预期运行


基本上,我想显示任何具有
sd\u标题
的内容,如
策略
指南
,并且没有
sd\u文档分类
的内容,如
“%trust wide pol%”

正如Gordon和dnoeth所指出的,括号就是问题所在。我认为您实际上需要以下查询

SELECT sdd.sd_doc_classification,
       sdd.sd_title,
       sdd.sd_desc,
       sdr.sd_upload_fname
FROM sdoc_docs AS sdd
INNER JOIN sdoc_revh AS sdr ON sdd.sd_id = sdr.sd_id
WHERE 
    (
        sdd.sd_title LIKE '%policy%'
        OR 
        sdd.sd_title LIKE '%guideline%'
    )
    AND 
    sdd.sd_doc_classification NOT LIKE '%\Trust Wide Policies & Guidelines\%'

我发现,正确地勾选不同的OR和and子句显然使它们更易于可视化和理解。

的优先级高于
——也就是说,您的查询好像是这样写的:

SELECT sdd.sd_doc_classification,
       sdd.sd_title,
       sdd.sd_desc,
       sdr.sd_upload_fname
FROM       sdoc_docs AS sdd
INNER JOIN sdoc_revh AS sdr ON sdd.sd_id = sdr.sd_id
WHERE      (sdd.sd_title LIKE '%policy%') OR 
           ((sdd.sd_title LIKE '%guideline%') AND 
            (sdd.sd_doc_classification NOT LIKE 
             '%\Trust Wide Policies & Guidelines\%')) 
如果要控制计算条件的优先级,可以自己显式添加括号:

SELECT sdd.sd_doc_classification,
       sdd.sd_title,
       sdd.sd_desc,
       sdr.sd_upload_fname
FROM       sdoc_docs AS sdd
INNER JOIN sdoc_revh AS sdr ON sdd.sd_id = sdr.sd_id
WHERE      ((sdd.sd_title LIKE '%policy%') OR 
            (sdd.sd_title LIKE '%guideline%')) AND 
           (sdd.sd_doc_classification NOT LIKE 
             '%\Trust Wide Policies & Guidelines\%')

只要正确使用括号。无论何时混合使用
,都应该添加括号。优先顺序是
而不是
-
-
这是可行的,而且现在很有意义。非常感谢。这也是可行的,也是有道理的。我知道我现在做错了什么。谢谢