一个技术难题~~~~~~~~

skylla 2009-01-14 09:07:17
这么回事,假设有这么一个语句
sql a.number,a.name,b.class
from aaa a,bbb b
where a.number=b.number and a.number=15;
但是情况有可能是b表中根本没有和a表中number相同的记录,那么这个sql语句的执行结果肯定是a.number,a.name,b.class全为空,对吧?
现在我需要这样,如果选择出的结果为空,则自动赋值为0,我用nvl函数,但是似乎不能这么用
sql nvl(a.number,0),a.name,b.class //name和class允许为空
from aaa a,bbb b
where a.number=b.number and a.number=15;
这个语句肯定是错的,那该如何写呢??谢谢!!

此外再问个问题,oracle数据表中的null值和c++中的不一样吧,我把数据表中的null值在c++里打印出来是空白,就是什么都不显示。
但是c++中null的定义就是0或者是(void*)0,那如果把数据表中的空值和null比,肯定是不等的,那改如何在c++中判断一个值是否为空呢?
我看好像有这么个办法,if(&数据表中的空值==null),地址比较,这么弄不知道对不对。
...全文
73 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
海洋‘s 2009-01-17
  • 打赏
  • 举报
回复
select nvl(b.number,0),a.name, b.class
from aaa a,bbb b
where a.number=b.number(+)
and a.name=b.name
and a.number=15;
白发程序猿 2009-01-16
  • 打赏
  • 举报
回复
sql a.number,a.name,b.class
from aaa a,bbb b
where a.number=b.number(+) and a.number=15;
如果表bbb里没有number=15的,
用上面的这个语句得出来a.number是15,b.class才是null
shili150 2009-01-16
  • 打赏
  • 举报
回复
有这样写sql的么

至少where 后应该a.number=15放在前面
fengzhu1008 2009-01-16
  • 打赏
  • 举报
回复
null似乎不能比较地址吧,赞同1楼的说法。
mosaic 2009-01-14
  • 打赏
  • 举报
回复
a.number指定了等于15,那肯定不可能把空的记录取出来。

select nvl(b.number,0),a.name, b.class
from aaa a,bbb b
where a.number=b.number(+) and a.number=15;

C++里面没有什么空一说吧,最多也就是字符串或字符也空的情况,如"", ''。 其他基本数据类型,应该都没有这个说法。
而数据库所有类型的字段应该都可以为空。

你那个比较地址肯定不对的。
tkzrz 2009-01-14
  • 打赏
  • 举报
回复
select nvl(a.number,0),a.name,nvl(b.class)from aaa a,bbb a where a.number=15 and a.number=b.number(+);
应该是外连接的问题吧。呵呵,我也是刚学,上面语句做个参照。你可以查下外连接的知识。
在oracle中null是通过 if(XX.XXX is null)来判断的。c++中应该也一样吧

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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