自连接查询的时候,用编号来当查询条件是等号两边是不可以乱写的
2014-02-14 15:58
323 查看
问:查找出收入(工资加上奖金),下级比自己上级还高的员工名字?
这个题看是简单,但是在我第一次写sql语句的sql就没有成功,我是这样写的:
select a.ename from emp a, emp b where a.empno = b.mgr and (a.sal + nvl(a.comm,0)) > (b.sal + nvl(b.comm,0));
查询结果是:
这个是错误的,正确的sql是:
select a.ename from emp a, emp b where a.mgr = b.empno and (a.sal + nvl(a.comm,0)) > (b.sal + nvl(b.comm,0));
结果是:
这是为什么呢?
原来是这样的:自连接就是把自己当成是两张表来对待,想想我们正在在使用两张表来查询的时候,假如有a和b表,a里面有a1字段、a2字段和b的一个主键字段b1,b表里有b1、b2和a表的一个主键字段a1;我们来连接查的时候肯定是:a.b1 = b.a1;
那如果a、b表是一个表的话 那么他的结构就是:a1,a2,b1,b2;当我们要使用自己连自己的话,就要拆分成上面的a和b表的结构了,那我的那个错误就解决了。
ps:以上只是我的个人总结,不喜勿喷,如果有错或者有更好的解决思路,欢迎投递Email:sslf_vip@163.com 谢谢!
这个题看是简单,但是在我第一次写sql语句的sql就没有成功,我是这样写的:
select a.ename from emp a, emp b where a.empno = b.mgr and (a.sal + nvl(a.comm,0)) > (b.sal + nvl(b.comm,0));
查询结果是:
这个是错误的,正确的sql是:
select a.ename from emp a, emp b where a.mgr = b.empno and (a.sal + nvl(a.comm,0)) > (b.sal + nvl(b.comm,0));
结果是:
这是为什么呢?
原来是这样的:自连接就是把自己当成是两张表来对待,想想我们正在在使用两张表来查询的时候,假如有a和b表,a里面有a1字段、a2字段和b的一个主键字段b1,b表里有b1、b2和a表的一个主键字段a1;我们来连接查的时候肯定是:a.b1 = b.a1;
那如果a、b表是一个表的话 那么他的结构就是:a1,a2,b1,b2;当我们要使用自己连自己的话,就要拆分成上面的a和b表的结构了,那我的那个错误就解决了。
ps:以上只是我的个人总结,不喜勿喷,如果有错或者有更好的解决思路,欢迎投递Email:sslf_vip@163.com 谢谢!
相关文章推荐
- nginx + ngx_lua安装测试
- java jmenu的替代方案
- awk
- jCarousel使用说明文档(中文)
- Distance on Chessboard
- Runable和thread的区别(多线程必须用Runable)
- JQuery开发之Galleriffic图片插件介绍
- iOS快速开发技巧:7技巧加快你的开发
- android学习——NDK入门 windows下安装cygwin 与 Eclipse使用CDT 自动编译
- ASP.NET MVC+Nhibernate+bootcss实现权限管理系列[完全免费和开源] 序
- Linux之忘记root密码的解决之道
- 图片的内存缓存控制
- ICTCLAS的JNI调用接口说明
- jQuery Mobile 1.1八大新特性介绍
- PHP 配合Cross-Origin Resource Sharing实现跨域 使用心得
- 监控数据库表变化
- 专业主干课程,核心课程
- 实战 SSH 端口转发
- Effecive C++ 解析2
- Hibrenate many-to-many映射时,用Set中元素做条件查询