select rownum rn ,a.*  FROM CMS_Blogs a  
inner JOIN  Common_BlogTypes d ON a.CBlogTypes = d.BTypID 
where 1=1  AND 0=0and rownum <= 10 ORDER BY a.CBlogID desc
399 399CBLOGNAME cblogtruename399
398 398CBLOGNAME cblogtruename398
397 397CBLOGNAME cblogtruename397
396 396CBLOGNAME cblogtruename396
395 395CBLOGNAME cblogtruename395
394 394CBLOGNAME cblogtruename394
393 393CBLOGNAME cblogtruename393
392 392CBLOGNAME cblogtruename392
391 391CBLOGNAME cblogtruename391
390 390CBLOGNAME cblogtruename390
--------------------------------------------------------
select rownum rn ,a.*  FROM CMS_Blogs a  
left JOIN  Common_BlogTypes d ON a.CBlogTypes = d.BTypID 
where 1=1  AND 0=0and rownum <= 10 ORDER BY a.CBlogID desc
10 10CBLOGNAME cblogtruename10
9 9CBLOGNAME cblogtruename9
8 8CBLOGNAME cblogtruename8
7 7CBLOGNAME cblogtruename7
6 6CBLOGNAME cblogtruename6
5 5CBLOGNAME cblogtruename5
4 4CBLOGNAME cblogtruename4
3 3CBLOGNAME cblogtruename3
2 2CBLOGNAME cblogtruename2
1 1CBLOGNAME cblogtruename1
以上两个查询语句区别就是在一个是inner join 一个是left join

解决方案 »

  1.   

    有意思啊,一般inner join 查询得到的是left join的子集!
    你的结果显示完了吗?我是指第二个的,是不是一页没显示下的??
      

  2.   

    哦 ,看出来了.这个语句的关键是我以前碰到过的ORDER BY,与ROWNUM的问题.
    它肯定最多只能显示10条数据的?具体是哪10条,我到现在还是说不是很明白,可能真的是别人给我解答的,说是ORACLE的优化机制造成的!
      

  3.   

    left join跟inner join 当然不一样.left join以a表为基础,不管d表中有没BTypID和a表中的CBlogTypes相等,都会表a的数据输出来,inner的话必须满足a.CBlogTypes = d.BTypID 且2表都有数据才显示.
    例如:
    a表           b表
    id name       id  part
    1   a         3    e
    2   b         4    f
    3   c
    4   d
    select a.* from a left join b on a.id=b.id时,不管b表有没相符合.都会输出a表的4项.
    select a.* from a inner join b on a.id=b.id时,输出的是跟b表相符合的项,即id=3 id=4两项.
    如果限定只输出2项,那么结果第一条查询就只输出id=1 id=2两项,第二条查询输出id=3 id=4两项