create table testa(
aid int,
name varchar2(20)
)create table testb(
bid int,
bname varchar2(20)
)create table c(
aid int,
bid int
)
insert into testa(1,'a1');
insert into testa(2,'a2');
insert into testb(1,'b1');
insert into testb(2,'b2');
insert into c(1,1);要显示aid,bid,aname,bname
如果c表中a,b没有关联显示ab无关系
aid int,
name varchar2(20)
)create table testb(
bid int,
bname varchar2(20)
)create table c(
aid int,
bid int
)
insert into testa(1,'a1');
insert into testa(2,'a2');
insert into testb(1,'b1');
insert into testb(2,'b2');
insert into c(1,1);要显示aid,bid,aname,bname
如果c表中a,b没有关联显示ab无关系
from testa,testb
试一下
from testa a, test b, c
where c.aid(+) = a.aid
or c.aid(+) = b.bid;
UNION ALL
SELECT NULL,NULL,NULL,CASE WHEN (C.AID IS NULL AND C.BID IS NULL) THEN 'ab无关系' ELSE NULL END FROM C
SQL> select * from testa; AID NAME
---------- --------------------
1 a1
2 a2SQL> select * from testb; BID BNAME
---------- --------------------
1 b1
2 b2SQL> select * from c; AID BID
---------- ----------
1 1SQL> select f.aid, f.bid, f.aname, decode(f.caid, null, 'no relationship', f.bname ) bname from
2 (
3 select T.aid, T.bid, t.aname, T.bname, c.aid caid, c.bid cbid from
4 ( select aid aid, bid bid, A.name aname, B.bname bname from testa A, testb B) T, c
5 where T.aid = c.aid(+)
6 and T.bid = c.bid(+)
7 ) F; AID BID ANAME BNAME
---------- ---------- -------------------- --------------------
1 1 a1 b1
2 1 a2 no relationship
1 2 a1 no relationship
2 2 a2 no relationship
没有写在or和in中, 不喜欢+, 改下不也很简单么
SQL> select f.aid, f.bid, f.aname, decode(f.caid, null, 'no relationship', f.bname ) bname from
2 (
3 select T.aid, T.bid, t.aname, T.bname, c.aid caid, c.bid cbid from
4 ( select aid aid, bid bid, A.name aname, B.bname bname from testa A, testb B) T left join c
5 on T.aid = c.aid
6 and T.bid = c.bid
7 ) F; AID BID ANAME BNAME
---------- ---------- -------------------- --------------------
1 1 a1 b1
1 2 a1 no relationship
2 1 a2 no relationship
2 2 a2 no relationship
select a.aid aid,
b.bid bid,
a.aname aname,
decode(a.aid - b.bid, 0, b.bname, 'ab无关系') bname
from testa a, test b, c
where c.aid(+) = a.aid
or c.aid(+) = b.bid;
2 from (select * from testa full join testbb on testa.aid = testbb.bid) t,
3 c
4 where c.aid(+) = t.aid
5 and c.bid(+) = t.bid
6 / AID BID NAME BNAME
---------- ---------- -------------------- --------------------
1 1 a1 b1
2 2 a2 ab无关系SQL>
SQL> SELECT * FROM TESTA; AID NAME
--------------------------------------- --------------------
1 a1
2 a2SQL> SELECT * FROM TESTB; BID BNAME
--------------------------------------- --------------------
1 b1
2 b2SQL> SELECT * FROM C; AID BID
--------------------------------------- ---------------------------------------
3 3
1 3
1 1
3 1SQL> SELECT A.AID,
2 B.BID,
3 NAME,
4 DECODE(NVL(A.AID,0)*NVL(B.BID,0),0,'AB无关系',BNAME) BNAME
5 FROM TESTA A,
6 TESTB B,
7 C
8 WHERE C.AID = A.AID(+)
9 AND C.BID = B.BID(+); AID BID NAME BNAME
--------------------------------------- --------------------------------------- -------------------- --------------------
1 AB无关系
1 1 a1 b1
AB无关系
1 a1 AB无关系
就不应该有了
SQL> SELECT A.AID,
2 B.BID,
3 NAME,
4 DECODE(NVL(A.AID,0)*NVL(B.BID,0),0,'AB无关系',BNAME) BNAME
5 FROM TESTA A,
6 TESTB B,
7 C
8 WHERE C.AID = A.AID(+)
9 AND C.BID = B.BID(+); AID BID NAME BNAME
---------------------- --------------------- -------------------- --------------------
1 AB无关系
1 1 a1 b1
AB无关系
1 a1 AB无关系
显示结果大概要这个样子的。。
aid name bid bname
1 a1 1 b1
2 a2 ab没关系 ab没关系
日!你自己到底要什么...上面的代码自己弄个来改改就行.
SQL> select t.aid,t.name,decode(c.aid, null, 'ab无关系', t.bid) bid,decode(c.aid, null, 'ab无关系', t.bname) bname
2 from (select * from testa full join testbb on testa.aid = testbb.bid) t,
3 c
4 where c.aid(+) = t.aid
5 and c.bid(+) = t.bid
6 / AID NAME BID BNAME
---------- -------------------- ---------------------------------------- --------------------
1 a1 1 b1
2 a2 ab无关系 ab无关系SQL>
WHERE A.AID IN (SELECT AID FROM TESTC WHERE AID=A.AID AND BID=B.BID)