作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个 SQL 语句,用于在数据库中搜索特定列中的关键字。我需要查询返回满足关键字 1 和关键字 2 条件的记录。这很有效,但是我需要允许从多个列中查询关键字。添加 OR 子句后无法让查询返回对两个关键字都有命中的记录的结果,而不仅仅是一个关键字。
为什么 OR 子句会影响 AND 子句?
如何修改此语句以允许同时搜索指定的 3 列的同时需要两个关键字才能获得命中?
声明:
SELECT CASE WHEN t1.longdesc IS NULL THEN t1.desc
WHEN t1.longdesc IS NOT NULL THEN t1.longdesc END AS 'description',
t1.upc
FROM Items t1
LEFT JOIN Suppliers t2 ON t1.supplier = t2.supplier_no
LEFT JOIN Sections t3 ON t1.Section = t3.section_no
LEFT JOIN Groups t4 on t1.group = t4.group
WHERE desc LIKE '%keyword1%'
OR Item_code LIKE '%keyword1%'
OR certify_code LIKE '%keyword1%'
AND desc LIKE '%keyword2%'
OR Item_code LIKE '%keyword2%'
OR certify_code LIKE '%keyword2%'
最佳答案
AND
的优先级高于 OR
。如果你想创建一个条件,逻辑上说“keyword1 在任何这些列上匹配,keywrod2 在任何这些列上匹配”,你需要用括号将每个 AND
参数括起来避免它优先:
(顺便说一句,选择列表中的描述表达式可以通过使用 coalesce
来简化)
SELECT COALESCE (t1.longdesc, t1.desc) AS description, t1.upc
FROM Items t1
LEFT JOIN Suppliers t2 ON t1.supplier = t2.supplier_no
LEFT JOIN Sections t3 ON t1.Section = t3.section_no
LEFT JOIN Groups t4 on t1.group = t4.group
WHERE (desc LIKE '%keyword1%' OR
Item_code LIKE '%keyword1%' OR
certify_code LIKE '%keyword1%') AND
(desc LIKE '%keyword2%' OR
Item_code LIKE '%keyword2%' OR
certify_code LIKE '%keyword2%')
关于sql - OR 子句影响 AND 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768540/
我是一名优秀的程序员,十分优秀!