论坛首页 入门技术论坛

表的自连接同子查询有区别?

浏览 3185 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-06-23  

运用自连接同子查询之间有什么区别?请大家给点意见

 

SELECT R1.readerid,R1.readername,R1.unit,R1.bookcount
FROM ReaderInfo AS R1,ReaderInfo AS R2
WHERE R2.readerid=9704
AND R1.bookcount>R2.bookcount     --连接关系
ORDER BY R1.bookcount

 

 

 

SELECT readerid,readername,unit,bookcount
FROM ReaderInfo
WHERE bookcount>(SELECT bookcount   --使用子查询
FROM ReaderInfo
WHERE readerid=9704)
ORDER BY bookcount

   发表时间:2008-06-23  
那要看数据库操作系统的的实现,在各个数据库其中实现方式略有不同,最好是看一下其执行计划~~~~~~
0 请登录后投票
   发表时间:2008-06-24  
方式二要求下面这个子查询的检索结果最多只有一条记录
SELECT bookcount   --使用子查询
FROM ReaderInfo
WHERE readerid=9704

方式一没有这个限制

不过,当这个子查询的结果有多条结果的时候
方式一得到的是个迪卡尔积

这种情况下,为了避免因为迪卡尔积而得到重复纪录,可以用exists方式


SELECT R1.readerid, R1.readername, R1.unit, R1.bookcount
FROM ReaderInfo A
WHERE exists
(
    select 1
    from ReaderInfo R2
    where R2.readerid=9704
    and R2.bookcount < R1.bookcount
)
ORDER BY R1.bookcount
0 请登录后投票
   发表时间:2008-06-25  
谢谢  armorking martri的指教
0 请登录后投票
   发表时间:2009-02-16  
你应该从执行这条SQL的效率方面去思考用哪一个?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics