这个ORACLE语句怎么写。(100)

  • 主题发起人 主题发起人 aahben
  • 开始时间 开始时间
A

aahben

Unregistered / Unconfirmed
GUEST, unregistred user!
有a,b,c三个表,都有字段DD,我要在条件中加入当任意两个表的DD字段不为空时要求相等,帮我看看该怎么办,我的大致意思如下select a.a1,b.b2,c.c3 from a,b,c where 1=1 and when a.a1 is not null and b.b2 is not null then a.dd=b.ddwhen a.a1 is not null and c.c3 is not null then a.dd=c.ddwhen b.b2 is not null and c.c3 is not null then b.dd=c.ddwhen a.a1 is not null and b.b2 is not null and c.c3 is not null then a.a1=b.b2 and a.a1=c.c3
 
你的要求相等是这种情况吗:当 a、b中dd不为空, a.dd = b.dd你还少写了一种情况,就是 a、b、c中dd都不为空的情况,此种情况是a.dd =b.dd and a.dd= c.dd ?
 
jiangxidna说的是对的,a,b,c中至少有一个的dd 不为空,当都不为空时a.dd =b.dd and a.dd= c.dd
 
a.a1 is not null and b.b2 is null 时, A和B怎么关联?三个表的字段是否为空或非空,组合方式一共有2*2*2=6种啊。
 
不好意思!数学没学好了,呵呵
 
没看懂提问的内容!既然要判断“当任意两个表的DD字段不为空时要求相等”,那和A的A1、B的B2、C的C3有什么关系?再看上面的那条语句,如果a.a1、b.b2、c.c3中只有一个不为空,其它两个为空,那结果不就变成全连接了!如果每一个表有10条记录,结果就成了1000条记录了。
 
不太明白楼主的意思?是不是像要如下的结果select a.a1,b.b2,c.c3 from a,b,c where a.dd=b.dd(+) and a.dd=c.dd(+)
 
create table TEMPdd as先找到不为空的个数大于等于2的dd,建立一个临时表,再通过临时表关连;create table TEMPdd as select dd, sum(1) ddsum from (select a.dd from a where a.dd is not null union all select b.dd from b where b.dd is not null union all select c.dd from c where c.dd is not null) TMPhaving sum(1) >= 2 group by tmp.dd查询select a.a1, b.b2, c.c3 from a, b, c, TEMPdd tmp where tmp.dd = a.dd(+) and tmp.dd = b.dd(+) and tmp.dd = c.dd(+) and a.a1 = b.b2 and a.a1 = c.c3
 
我觉得我的说得是很清楚的,a,b,c的dd都有为空和不为空的情况,只是没有都不为空存在,而这一点你们可以不考虑,只要有两个的DD不为空,就要求相等,三个都不为空时当然要a.dd =b.dd and a.dd= c.dd ,谢谢楼上的回答,power255的答案应该是比较接近的,只是我的A,B,C表太复杂,union加在一起太长,我这里加上我的解决语句.select a.a1,b.b2,c.c3 from a,b,cwhere 1=1 and (decode(a.a1,null,0,(decode(b.b2,null,0,1))=1 and a.dd=b.dd)or (decode(a.a1,null,0,(decode(c.C3,null,0,1))=1 and a.dd=b.dd)or(decode(b.b2,null,0,(decode(c.c3,null,0,1))=1 and a.dd=b.dd)
 

Similar threads

A
回复
0
查看
932
Andreas Hausladen
A
A
回复
0
查看
805
Andreas Hausladen
A
S
回复
0
查看
685
SUNSTONE的Delphi笔记
S
S
回复
0
查看
645
SUNSTONE的Delphi笔记
S
A
回复
0
查看
834
Andreas Hausladen
A
后退
顶部