如何在join on 里,根据 查询结果,拼关联语句??表a:
id:
class:肯定有值,如1,2,3
gread:肯定有值,如1,2,3表b:
id:
class:肯定有值,如1,2,3
gread:可能没有值,一个有全有,一个没有全没有,没有值时为空我想当b表中随便一条记录为空时地select a.*,b*
from a
inner join b on (a.class = b.class当b.gread,不为空时, and a.gread = b.gread)哪位高人知道,请告诉我一下,谢谢.
id:
class:肯定有值,如1,2,3
gread:肯定有值,如1,2,3表b:
id:
class:肯定有值,如1,2,3
gread:可能没有值,一个有全有,一个没有全没有,没有值时为空我想当b表中随便一条记录为空时地select a.*,b*
from a
inner join b on (a.class = b.class当b.gread,不为空时, and a.gread = b.gread)哪位高人知道,请告诉我一下,谢谢.
解决方案 »
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- 一个奇怪的问题
- 如何截取特定字符中间的内容
- 请教个sql语句,如何实现?大侠进来看一下~谢谢
- 我要在一台已经安装好oralce8.17的linux机器上再安装一个oracle10g,需要注意些什么呢?
- 为什么SQLPULS连接时出现“没有监听器”
- oracle9i中Oracle EnterPrise Manager中备份数据库时提示没有设置首选身份证明?怎样设置?
- 我提过的问题怎么没人回答呀,高手们快看看呀,就是我想在每月的25号自动调用一个存储过程,怎么解决?
- 一个存储过程显示的问题?
- win2000下oracle8i在enterprise manager 中备份数据老是报错,提示验证错误。
- sqlplus语句求助
- 有没有人能告诉我,几个关于oracle日志的问题
-- 是这个意思吗?如果不是的贴出相应的源数据和结果,大家好帮你想。SI=1的情况就是代表B.GREAD列中有NULL值的情况:SQL> SELECT * FROM A; CLASS GREAD
---------- ----------
1 1
2 1
3 1
1 2
1 3SQL>
SQL> SELECT * FROM B; CLASS GREAD
---------- ----------
1 1
2 1
3
1 2
1 3SQL>
SQL> SELECT A.*,
2 BB.*
3 FROM A,
4 (
5 SELECT B.*,
6 SIGN(COUNT(B.CLASS) OVER()-COUNT(B.GREAD) OVER()) SI
7 FROM B
8 )BB
9 WHERE A.CLASS = BB.CLASS
10 AND DECODE(SI,1,A.CLASS,A.GREAD) = DECODE(SI,1,BB.CLASS,BB.GREAD)
11 ; CLASS GREAD CLASS GREAD SI
---------- ---------- ---------- ---------- ----------
1 3 1 1 1
1 2 1 1 1
1 1 1 1 1
2 1 2 1 1
3 1 3 1
1 3 1 2 1
1 2 1 2 1
1 1 1 2 1
1 3 1 3 1
1 2 1 3 1
1 1 1 3 111 rows selectedSQL>
from a
inner join b on
a.class = b.class and a.gread = NVL2(b.gread,b.gread,a.gread)
--通过decode可以实现:SELECT A.*, B.*
FROM A
INNER JOIN B ON (A.CLASS = B.CLASS
AND DECODE(B.GREAD, NULL, 1, A.GREAD) = DECODE(B.GREAD, NULL, 1, B.GREAD)
);
and decode(a.gread,null,0,a.gread)=decode(b.gread,null,0,b.gread);