SQL查询问题:调试匹配word1/word2且包含word3的大文本列语句
解决SQL查询逻辑不符的问题
嘿,我懂你现在的困扰!你的SQL语句没返回预期结果,核心问题出在SQL运算符的优先级上——AND的优先级比OR高,所以你的原语句实际执行的逻辑是:
(包含"word1") OR (包含"word2" AND 包含"word3")
这和你想要的「(包含word1或word2)并且同时包含word3」完全不是一回事,自然结果不符合预期啦。
正确的写法
只需要把OR的两个条件用括号括起来,强制让OR的逻辑先执行,再和AND的条件结合就行:
SELECT * FROM Table1 WHERE (column LIKE "%word1%" OR column LIKE "%word2%") AND column LIKE "%word3%";
可选简化写法(根据数据库支持)
如果你的数据库支持正则表达式,还可以用更简洁的方式来写OR的部分,比如MySQL里可以这样:
SELECT * FROM Table1 WHERE column REGEXP 'word1|word2' AND column LIKE "%word3%";
不过要注意不同数据库的正则语法有差异,比如PostgreSQL用~,SQL Server可以用PATINDEX,根据你用的数据库调整就行。
内容的提问来源于stack exchange,提问作者user3296793
相关产品推荐
相关产品推荐

