敬请高手指教

clarkzhu 2006-04-11 12:00:36
设aa表和bb表有相同的字段num其它不相同,我用
select * from aa where
exists(select num from bb t
where num=t.num
and code='0371')

select * from aa b,(select num from bb
where code='0371') t
where b.num=t.num
两个语句查询时,结果会不会相同?能不能说明一下这个语句的执行原理。
...全文
120 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
clarkzhu 2006-04-12
  • 打赏
  • 举报
回复
谢谢楼上的!
写的很明白,很详细!
Renkey 2006-04-11
  • 打赏
  • 举报
回复
select * from aa t where
exists (select num from bb
where num=t.num
and code='0371')
沝林 2006-04-11
  • 打赏
  • 举报
回复
如果select num from bb where code='0371'的结果中num不唯一,也就是相同num值出现多次的情况下结果肯定会不一样,exists只要找到匹配的纪录就返回,不会出现重复,而2表关联对重复的纪录会多次关联,例:
SQL> select id from test_b;

ID
----------
001
002
004
005

SQL> select user_id,cost from test_a;

USER_ID COST
---------- ----------
001 11
001 232
001 23
001 343
001 123
002 12
002 123
002 12
002 213
002 123
003 1212
003 213
003 123

13 rows selected

SQL>
SQL> SELECT *
2 FROM test_b b
3 WHERE EXISTS (SELECT 1
4 FROM test_a a
5 WHERE a.user_id = b.ID
6 AND a.COST > 100)
7 /

ID
----------
001
002

SQL>
SQL> SELECT * FROM test_b b,
2 (SELECT user_id FROM test_a a WHERE COST > 100) t
3 WHERE b.ID = t.user_id
4 /

ID USER_ID
---------- ----------
001 001
001 001
001 001
002 002
002 002
002 002

6 rows selected
Hunterdiary 2006-04-11
  • 打赏
  • 举报
回复
这样的结果在很大的几率上是不同的。

这两个的条件语句不同,
exists (select num from bb
where num=t.num
and code='0371')
如果这个语句有记录,不论记录数的多少,那么它将返回表中所有的记录数。

第二个,则必须匹配条件才行。所以记录数会少与第一个的记录数。

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧