首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们能在WHERE子句中执行WHERE条件吗? where子句中如果一个条件不满足,那么解析器将继续执行下一个条件sql?

我们能在WHERE子句中执行WHERE条件吗? where子句中如果一个条件不满足,那么解析器将继续执行下一个条件sql?
EN

Stack Overflow用户
提问于 2020-04-14 13:53:31
回答 2查看 34关注 0票数 1

我希望我的SQL语句能够计算WHERE条件中的所有内容,并且在不满足某个条件时不会停止。我看到当第一个匹配的语句返回true时,CASE WHEN停止。

因此,与下面类似,如果满足WHEN条件,则仅评估THEN部分,如果满足条件,则不会停止。

有办法做到这一点吗?

代码语言:javascript
运行
复制
SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE CASE WHEN #{my_string} != '' THEN u.gender = #{my_string} 
WHEN #{my_string2} != '' THEN u.hometown = #{my_string2} 
WHEN #{my_string3} != '' THEN m.content = #{my_string3} 
END
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-14 14:22:07

我认为你实际上正在寻找的是一个AND/OR结构,在这个结构中,所有的条件都被AND在一起,但是当字符串没有指定时,我们使用OR #{my_string} == ''来绕过一个条件:

代码语言:javascript
运行
复制
SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE ( #{my_string}  = '' OR u.gender   = #{my_string} )
  AND ( #{my_string2} = '' OR u.hometown = #{my_string2} )
  AND ( #{my_string3} = '' OR m.content  = #{my_string3} )
票数 1
EN

Stack Overflow用户

发布于 2020-04-14 13:57:15

这样如何:

代码语言:javascript
运行
复制
SELECT m.* 
FROM users AS u 
JOIN microposts m ON u.id=m.user_id 
WHERE ( #{my_string} != '' AND u.gender = #{my_string} )
OR ( #{my_string2} != '' AND u.hometown = #{my_string2} )
OR ( #{my_string3} != '' AND m.content = #{my_string3} )

这将查找满足这三个条件中的任何一个的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61201473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档