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

 

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

评论
beyondsanli 2008-06-25   回复
谢谢  armorking martri的指教
armorking 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
martri 2008-06-23   回复
那要看数据库操作系统的的实现,在各个数据库其中实现方式略有不同,最好是看一下其执行计划~~~~~~
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

beyondsanli
搜索本博客
我的相册
Be4dd72d-74eb-3b6c-bd66-8c88bf719186-thumb
CIMG0924
共 34 张
存档
最新评论