两表用(+)联接的时候,有空值的记录能不能查询出来?

badsky 2004-01-07 04:42:58
比如说两个表

主表A :
value value_date type_id
----- ---------- --------
25 2003-12-12 1
30 2003-12-11 2
10 2003-12-01 3
60 2003-12-31 4
15 2003-12-31 6
35 2003-12-31

字典表B :
type_id type
------- ----
1 x
2 y
3 z
4 p

用select A.type_id, B.type ,A.value from A,B where A.type_id=B.type_id(+);

会查询出5条记录来。A表的最后一条记录无法出来。

有没有办法让A表中type_id为空的记录也查询出来呢?
...全文
76 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
badsky 2004-01-08
  • 打赏
  • 举报
回复
解决了。

生成到临时表里,才会列出来!

谢谢各位的提点了。

给分
showmetoyou 2004-01-07
  • 打赏
  • 举报
回复
你把一个子查询结果集生成一个临时表好了!就是select 字段 into 临时表A 发from 表!
再用select A.type_id, B.type ,A.value from A,B where A.type_id=B.type_id(+);
badsky 2004-01-07
  • 打赏
  • 举报
回复
我的A表实际是一个子查询结果集
我这里是查不出来的

你能试试吗?
smallcrocodile 2004-01-07
  • 打赏
  • 举报
回复
能查出来
beckhambobo 2004-01-07
  • 打赏
  • 举报
回复
SQL> select * from a;

VALUE VALUE_DATE ID
---------- ----------- ----------
10 2004-1-7 18 1
10 2004-1-7 18 2
10 2004-1-7 18 3
20 2004-1-7 18

SQL> select * from b;

ID TYPE
---------- ----------
1 aa
2 bb

SQL> select a.id,value_date from a,b where a.id=b.id(+);

ID VALUE_DATE
---------- -----------
1 2004-1-7 18
2 2004-1-7 18
3 2004-1-7 18
2004-1-7 18

测试正确
badsky 2004-01-07
  • 打赏
  • 举报
回复
是最后select A.type_id, B.type ,A.value from A,B where A.type_id=B.type_id(+);

不列出来
badsky 2004-01-07
  • 打赏
  • 举报
回复
to: doer_ljy(可战)

子查询出来确实是会有type_id为空的这样的记录,(是子查询出来的,我不清楚是null还是空)
最后不被列出来。

LGQDUCKY 2004-01-07
  • 打赏
  • 举报
回复
这样就可以呀,我刚才试了:
select count(*) from A,B where A.type_id=B.type_id(+);


看下:
doer_ljy 2004-01-07
  • 打赏
  • 举报
回复
我感觉是你的子查询出了问题。
看看“一句查询语句查出一个类似A表这样的结果”里面是不是有空值。
很可能里面已经没有空值了!
badsky 2004-01-07
  • 打赏
  • 举报
回复
我的实际查询是这样的,A表是一句查询语句查出一个类似A表这样的结果

然后再联接查询,A中的type_id为空值的记录就不被列出来

bzszp 2004-01-07
  • 打赏
  • 举报
回复
这样应该可以出来的
你再试试
doer_ljy 2004-01-07
  • 打赏
  • 举报
回复
本来就可以啊!
不用家什么特殊的东西!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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