浏览 3063 次
锁定老帖子 主题:Oracle Bug
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-21
create table A( A1 VARCHAR(16) ); create table B( B1 VARCHAR(16) ); insert into A(A1) values('content_1'); insert into A(A1) values('content_2'); insert into A(A1) values('content_3'); insert into B(B1) values('content_4'); -- 测试 -- select count(*) from A where A1 in (select A1 from B); -- 表B中并不存在A1字段 -- 输出结果: 3 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-09-21
在plsql的sql windows
select count(*) from A where A1 in (select A1 from B); count(*) 0 command windows select count(*) from A where A1 in (select A1 from B); COUNT(*) ---------- 3 应该只是显示的问题 实际结果是没问题的 |
|
返回顶楼 | |
发表时间:2007-09-21
这个编译的过程就有问题,应该编译都不能通过的。
B表里根本就没A1字段,怎么可以查出值呀。 如果单独运行 select A1 from B 绝对是错误的。 一组合就对了。 |
|
返回顶楼 | |
发表时间:2007-09-21
后面应该是当做临时表来处理的
如果是临时表的话 机制可能不同 至于说报不报错..... 无所谓了.. 结果正确就行 |
|
返回顶楼 | |
发表时间:2007-09-21
但是如果要是这样用(只要不和where后的字段一样,并且在B中也没该字段)如:
select count(*) from A where A1 in (select A2 from B); 它就会报错了。 这样就对的(和where后的字段一样),在oracle中,在SQLServer中也是错的。 select count(*) from A where A1 in (select A1 from B); |
|
返回顶楼 | |
发表时间:2007-09-21
这个报错是肯定的
因为check的地方不一样 对oracle如果建临时表机制不了解 不过你要判断一个字段in 临时表 最少那个临时表要有这个字段吧 SQLServer没怎么多用就 不太了解 他和oracle太多地方不一样了 |
|
返回顶楼 | |