请教:两表数据对比问题2

[复制链接]
查看11 | 回复9 | 2009-7-22 09:30:00 | 显示全部楼层 |阅读模式
A,B两个表,A表的字段比B表的字段多一个(ID),且具有唯一键约束;其他的字段和B表中的一模一样
B中的数据在A中都存在,我想取出这些数据在A中对应的ID值,怎么取??

可以简单地这样来看:
A:
ID SUBID NAME
--- -------------
11X
21Y
32null
===========
B:
SUBIDNAME
-------- -------
1 X
1 Y
2
null
如何把两表具有相同数据的A.ID给取出来?有没有简单一点的方法?
别告诉我说这样写...
where (a.subid=b.subid or (a.subid is null and b.subid is null))
and (a.name=b.name or (a.name is null and b.name is null))
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
顶~~ 怎么没人回答啊
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
where (a.subid=b.subid or (a.subid is null and b.subid is null))
and (a.name=b.name or (a.name is null and b.name is null))
改为:
where a.subid = b.subid and nvl(a.name,'0')=nvl(b.name,'0')
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 caizhuoyi 于 2008-10-31 19:54 发表
where (a.subid=b.subid or (a.subid is null and b.subid is null))
and (a.name=b.name or (a.name is null and b.name is null))
改为:
where a.subid = b.subid and nvl(a.name,'0')=nvl(b.name,'0')

噢,我把这个给忘了。。
还有其他好注意没了?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
不是什么好主意,只是一种方法:
where lpad(a.subid,20)||lpad(a.name,20) = lpad(b.subid,20)||lpad(b.name,20)
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
楼上的方法不对,lpad(char1,n,char2)的三个参数有人一个为NULL 或者n=0 其返回结果都为NULL,char2默认为空格。
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 caizhuoyi 于 2008-10-31 19:54 发表
where (a.subid=b.subid or (a.subid is null and b.subid is null))
and (a.name=b.name or (a.name is null and b.name is null))
改为:
where a.subid = b.subid and nvl(a.name,'0')=nvl(b.name,'0')

如果采用这种方法,所有的列都需要判断一次,如果字段比较多,并且B表中数据也比较多的话,会很慢吧?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 serapy 于 2008-11-1 10:09 发表
楼上的方法不对,lpad(char1,n,char2)的三个参数有人一个为NULL 或者n=0 其返回结果都为NULL,char2默认为空格。

你说得对,NULL会有问题,要么修改为:
where lpad(' '||a.subid,20)||lpad(' '||a.name,20) = lpad(' '||b.subid,20)||lpad(' '||b.name,20)
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
A中的其他的字段和B表中的一模一样,B中的数据在A中都存在,那么不是直接取出A表中的ID值可以呀????还要什么条伯??
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
用个NVL就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行