gpt4 book ai didi

sql - OR 子句影响 AND 子句?

转载 作者:行者123 更新时间:2023-12-01 09:54:38 25 4
gpt4 key购买 nike

我正在创建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com