sql and和or的问题
declare@sintset@s=?select*fromtable_1where@s=1and@s=2or@s=3这里的3个条件运行顺序是什么样的?如果@s=1成立,...
declare @s int
set @s = ?
select * from table_1 where @s=1 and @s=2 or @s=3
这里的3个条件运行顺序是什么样的?
如果@s=1成立, 后面的2个还会运行吗?
如果@s=2成立, 另外的2个会运行吗?
如果@s=3成立, 另外的2个会运行吗? 展开
set @s = ?
select * from table_1 where @s=1 and @s=2 or @s=3
这里的3个条件运行顺序是什么样的?
如果@s=1成立, 后面的2个还会运行吗?
如果@s=2成立, 另外的2个会运行吗?
如果@s=3成立, 另外的2个会运行吗? 展开
3个回答
展开全部
对于where语句后面的3个条件都会运行,不会因为满足某个条件而摒弃另外2个条件。
只是条件匹配的顺序不同,返回的结果也不同。
and优先级高于or
可参考以下文档的测试,写得比较清楚。http://wenku.baidu.com/view/0692ab27ccbff121dd368332.html
对于你的问题中的sql,你目前的写法返回的结果是满足@s=1 and @s=2的,或者满足@s=3的
如果你想要的是满足@s=1 和 @s=2 或者@s=1 和@s=3的
应该写成@s=1 and ((@s=2 or @s=3)
只是条件匹配的顺序不同,返回的结果也不同。
and优先级高于or
可参考以下文档的测试,写得比较清楚。http://wenku.baidu.com/view/0692ab27ccbff121dd368332.html
对于你的问题中的sql,你目前的写法返回的结果是满足@s=1 and @s=2的,或者满足@s=3的
如果你想要的是满足@s=1 和 @s=2 或者@s=1 和@s=3的
应该写成@s=1 and ((@s=2 or @s=3)
参考资料: http://zhidao.baidu.com/question/404028489.html?oldq=1
展开全部
首先,肯定所有or连接的过滤条件都要参与判断,只有一种情况可以省略,就是如果@s=1不成立,那@s=2就无需判断了,但不管遇到什么情况,@s=3都要进行判断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这样的写法结果是:select * from table_1 where ( @s=1 and @s=2 ) or @s=3 懂了没
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询