SQL NOT EXISTS 语句问题。
答案:3 悬赏:0 手机版
解决时间 2021-02-11 13:43
- 提问者网友:wodetian
- 2021-02-10 18:25
select * from 表1 as a where a.字段1 not exists (select b.字段1 from 表2 as b) order by a.字段1 功能是找出字段1中 表1比表2多出的行,然后排序显示出来,但是执行的时候提示 exists 附近有错误,不知道怎么回事?
最佳答案
- 五星知识达人网友:野味小生
- 2021-02-10 20:03
用exists,前面不要加字段,按你的写法把exists改成in就可以了。
或者
select * from 表1 as a where not exists (select b.字段1 from 表2 as b where b.字段1=a.字段1) order by a.字段1
或者
select * from 表1 as a where not exists (select b.字段1 from 表2 as b where b.字段1=a.字段1) order by a.字段1
全部回答
- 1楼网友:山君与见山
- 2021-02-10 21:21
select * from 表1 where not exists (select 字段1 from 表2 where 表1.字段1=表2.字段1 ) order by 字段1
- 2楼网友:时间的尘埃
- 2021-02-10 20:20
exists或者not exists是把主查询的字段传到后边的查询中作为条件,返回值是true或者false。exists true,那么就是查询条件成立,结果会显示出来。not exists true,则为false,查询连接条件不成立。
select * from course where not exists(select * from grade where grade.课程代号=course.课程代号)
这个语句,是查询course表中课程代号在grade中没有出现的数据。
看看grade表,课程编号有k01到k06,而course表,有k01到k07,那么k07在grade表是不存在的,那么,是符合条件的。
同样select * from course where exists(select * from grade where grade.课程代号=course.课程代号)
则是查询course的记录条件为编号在grade中存在。那么很明显,结果是k01到k06的数据。
另外,exists和not exists的作用可以用in或not in实现,但是,效率要高。
因为exists和not exists返回的结果是true或者false,那么则在子查询中,遇到第一个符合条件的结果,就会退出查询,而不会进行全表的检索。而not in或者in,要把子查询中的select字句全部查询出来才行。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯