SELECT * FROM MOBILE_SUB1
db:oracle9i
table: MOBILE_TESTname     color  
NOKI3     RED              
NOKIA     NOKI3  
NOKIA1    NOKIA1  
写了段自我连接的sql文,如下:SELECT UNIQUE  A.NAME,A.COLOR
FROM MOBILE_TEST A JOIN MOBILE_TEST B
ON A.COLOR = B.NAME
AND A.NAME  != B.NAME 疑问1、自我连接在实际项目中用得多吗?
疑问2、AND A.NAME  != B.NAME  换成 WHERE A.NAME  != B.NAME 
       检索效果一样。其他的单表检索条件(如:A.NAME = 'NOKIA')也作为ON
       的一部分,规范吗?(我试过,跟放在where后面检索效果是一样的。)疑问3、没有写 AND A.NAME  != B.NAME  的话:
       NOKIA1    NOKIA1
       NOKIA     NOKI3       写了 AND A.NAME  != B.NAME  的话:
       NOKIA     NOKI3
 
       我写这句本意是想排出记录跟自己比较的可能性。可是好像作用跟我想象的有出入……迷惑中请大家帮我指点迷津啊!拜谢!

解决方案 »

  1.   

    1:不清楚
    2:效果是一样的,规范
    3:AND A.NAME != B.NAME后NOKIA1    NOKIA1这条当然就不能选出来啦
      

  2.   

    1、自我连接,有时候可以得到具有类似业务沿革数据,按照特定要求筛选,显示业务前后比对数据的效果。
    2、效果是一样的。
    3、你前面有个A.COLOR = B.NAME ,而有加了个AND A.NAME != B.NAME,间接使A.NAME != A.COLOR,你说呢。呵呵。