Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1705651
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-07-25 13:08:46

一个关于外连接的浅尝辄止的测试,我错误地理解 SQL 的执行过程了,记录一下。
 
创建测试表:
 
SQL> select * from t1;
 
         A          B          C
---------- ---------- ----------
         1          1          1
         2          2          2
         3          3          3
         4          4          4
         5          5          5
         6          6          6
         7          7          7
         8          8          8
         9          9          9
 
9 rows selected
 
SQL> select * from t2;
 
         A          B          C
---------- ---------- ----------
         1          1          1
         2          2          2
         3          3          3
         4          4          4
         5          5          5
 
SQL> select * from t3;
 
         A          B          C
---------- ---------- ----------
         1          1          1
         2          2          2
         3          3          3
 
SQL>
 
我想要这个 SQL 查询到的结果:
 
SQL> select t1.*, tx.*
  2    from t1, (select t2.* from t2, t3 where t2.a = t3.a) tx
  3   where t1.a = tx.a(+);
 
         A          B          C          A          B          C
---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1
         2          2          2          2          2          2
         3          3          3          3          3          3
         4          4          4                      
         5          5          5                      
         6          6          6                      
         7          7          7                      
         8          8          8                      
         9          9          9                      
 
9 rows selected
 
我修改一下这个 SQL,还想要同样的结果,却跟我想象的不一样:
 
SQL> select t1.*, t2.* from t1, t2, t3 where t1.a = t2.a(+) and t2.a = t3.a;
 
         A          B          C          A          B          C
---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1
         2          2          2          2          2          2
         3          3          3          3          3          3
 
SQL> select t1.*, t2.* from t1, t2, t3 where t1.a = t2.a(+) and t2.a = t3.a(+);
 
         A          B          C          A          B          C
---------- ---------- ---------- ---------- ---------- ----------
         1          1          1          1          1          1
         2          2          2          2          2          2
         3          3          3          3          3          3
         4          4          4          4          4          4
         5          5          5          5          5          5
         6          6          6                      
         7          7          7                      
         8          8          8                      
         9          9          9                      
 
9 rows selected
 
SQL>
 
阅读(2302) | 评论(0) | 转发(0) |
0

上一篇:一个小游戏

下一篇:MOVE - 表与索引

给主人留下些什么吧!~~