CREATE TABLE TB
(
       ID VARCHAR2(50) DEFAULT(SYS_GUID()),
       VAL VARCHAR2(50)
)
;CREATE TABLE TB2
(
       ID VARCHAR2(50) DEFAULT(SYS_GUID()),
       VAL VARCHAR2(50)
)
;CREATE TABLE TB3
(
       ID VARCHAR2(50) DEFAULT(SYS_GUID()),
       TBID VARCHAR2(50),
       TB2ID VARCHAR2(50)
)
;INSERT INTO TB VALUES('A199FFD63CC14905B6FE4A3084ADE14D','A');
INSERT INTO TB VALUES('B2C0E92CC26749EB801B2813005ACE38','B');
INSERT INTO TB VALUES('6932B49F208E4873870657D75F3BD648','C');INSERT INTO TB2 VALUES('B71683A8C83B4FBF8538C8F3CFC1648F','1');
INSERT INTO TB2 VALUES('3919A505D8454481B9C9B6E678308523','2');
INSERT INTO TB2 VALUES('B373D1F7D2CE4B189D11B25BD693105F','3');INSERT INTO TB3 VALUES('F239229F26DC4B91BAC14411E89E681A','A199FFD63CC14905B6FE4A3084ADE14D','B373D1F7D2CE4B189D11B25BD693105F');
INSERT INTO TB3 VALUES('82BF3B599226444F8407BCC918101190','A199FFD63CC14905B6FE4A3084ADE14D','B71683A8C83B4FBF8538C8F3CFC1648F');
INSERT INTO TB3 VALUES('8BC8E6EEB3C442C0894B5ACA3EC22EDE','B2C0E92CC26749EB801B2813005ACE38','3919A505D8454481B9C9B6E678308523');
INSERT INTO TB3 VALUES('C8808C0B48AA4A06985A9B3C87F9BAB9','6932B49F208E4873870657D75F3BD648','B71683A8C83B4FBF8538C8F3CFC1648F');COMMIT;
SELECT *
FROM TB A
     INNER JOIN TB2 B ON EXISTS(SELECT 1 FROM TB3 X WHERE A.ID=X.TBID AND B.ID=X.TB2ID)
ORDER BY A.VAL,B.VAL;   
     
SELECT *
FROM TB A
     LEFT JOIN TB2 B ON EXISTS(SELECT 1 FROM TB3 X WHERE A.ID=X.TBID AND B.ID=X.TB2ID)
ORDER BY A.VAL,B.VAL;
      因为我不太了解Oracle的执行机制,请问为什么两查询出来的结果会不一样!

解决方案 »

  1.   

    那你就研究一下ORACLE的连接问题内连接
    左连接
    右连接
      

  2.   

    结果肯定会不一样撒。
    inner 是取两表条件相等的数据,
    而left join 则是取左表所有的数据,右表不能关联上的数据补空显示。
    我觉得你可以先找2个简单的表进行尝试一下,那样才会找出2个连接的不同之处,也会让你印象更加深刻。
      

  3.   

    这个不是oracle的特性
    是数据库原理的连接
    楼主对表连接区别不清楚的话
    可以好好看下数据库系统概论
      

  4.   

    虽然会妨碍各位一点时间!但请各位在回答前尝试一下!因为在上面模拟的环境中,得出的结果集应该是一样的!我用的是10g的版本有问题,在家用11g或把数据搬到MSSQL也是上面查询出来的结果也是一样的!如果各位有10g的神人们,如果有空麻烦也帮忙试一下!!请把结果告诉小弟一下!我怕是我什么地方设置错误或者什么知识点没有深入的了解!
      

  5.   


    可能这句话说得有语病!我是想说在10g两个语句查出来的结果集不一样,在11g或MS SQL中,两个语句查出来的结果是一样的!