SQL中关联子查询exists是如何判断存在的?

neal2004 发布于 2013/05/07 13:00
阅读 1K+
收藏 1
SQL语句:select real_name,idcard_no from account o where exists(select 1 from account i where i.recommender_id = o.id) 其中子句返回常量1 那主句中的exists是怎样通过这个常量1来判断条件 i.recommender_id = o.id存在的?
加载中
0
不是小白
不是小白

。。。

1.首先通过  i.recommender_id = o.id这个条件,判断 括号内 的存在与否

2.若上一步存在,就有个值 1 ,若不存在,说明查询为空

3.这才轮到 exists 来判断。。。

不是小白
不是小白
回复 @neal2004 : 后面跟的内容不是什么都能的。你看看这篇文章吧:http://www.cnblogs.com/mytechblog/articles/2105785.html
neal2004
neal2004
那我发的SQL语句中将i.recommender=o.id也可以跟在exists后面了,那这里又用一个select是干什么用的?
不是小白
不是小白
回复 @neal2004 : :) 可以跟的。比如这句:DROP TABLE IF EXISTS `_article`; 意思就是判断在数据库里面是否存在 表 _article,若存在就删掉。
neal2004
neal2004
那为什么exists后面不直接跟条件,却要写一个子句呢?
不是小白
不是小白
回复 @neal2004 : 就是判断这条记录是不是存在的,跟 in 一样
下一页
0
优雅先生
优雅先生

select 1 from account i where i.recommender_id = o.id

这个是子查询,然后exists(select 1 from account i where i.recommender_id = o.id) 表示的是这个子查询返回的结果集大小大于0,即只要结果集不为空就满足EXISTS条件

返回顶部
顶部