自连接查询的时候,用编号来当查询条件是等号两边是不可以乱写的

问:查找出收入(工资加上奖金),下级比自己上级还高的员工名字?

这个题看是简单,但是在我第一次写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 谢谢!

posted @ 2014-02-14 15:58  水上灵风  阅读(277)  评论(0编辑  收藏  举报
水上灵风页脚