EXISTS函数是返回boolean值,而不关心返回结果集内容吗? 那下面的这个怎么回事?
有两个表。TableIn和TableEx,其中两个人在表1和表2都存在:马艳艳和邓事文我执行这个语句:select*fromTableInwhereexists(sele...
有两个表。TableIn 和TableEx,其中两个人在表1和表2都存在 :马艳艳和邓事文
我执行这个语句:
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME);
exists子查询返回的是boolean值,那么它会返回true,主查询执行select * from TableIn,那么应该把TableIn表里的所有数据都返回,可是却返回了两条数据。
这是为什么呢? 展开
我执行这个语句:
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME);
exists子查询返回的是boolean值,那么它会返回true,主查询执行select * from TableIn,那么应该把TableIn表里的所有数据都返回,可是却返回了两条数据。
这是为什么呢? 展开
1个回答
展开全部
exist是语法,相当于in,不是函数(函数指的是dbms提供的功能,exist是sql语言的语法)
exist其实就相当于select * from TableIn的结果集和select BID from TableEx where BNAME=TableIn.ANAME的结果集的子集
如果是not exist则代表前者与后者的补集的子集
exist其实就相当于select * from TableIn的结果集和select BID from TableEx where BNAME=TableIn.ANAME的结果集的子集
如果是not exist则代表前者与后者的补集的子集
追问
你说exists取的是结果集的子集。 但是select BID from TableEx where BNAME=TableIn.ANAME 这个语句返回的是BID的值。这个怎么能从select * from TableIn中取子集呢?
追答
select子句不重要,两个集合比对的是实际的集合,不是你检索出的部分字段
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询