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