Oracle select 查询语句

lkyzhm 2012-10-29 02:05:56
A表中字段为
A_ID,B_ID1,B_ID2,ATYPE
1, 1, 2, 1
2, 1, 3, 2
3, , ,3
4,, 2, 4
5,,,5
6 ,4,, 6

B表中字段为
B_ID,B_NAME
1 LIU
2 KAI
3 AAA
4 BBB
5 CCC
A表中B_ID1,B_ID2都是B表的外键;
我需要的结果为:

A_ID,B_NAME1,B_NAME2,ATYPE
1 ,LIU, KAI, 1
2 ,LIU, AAA, 2
3 ,,,3
4 ,,KAI, 4
5 ,,,5
6, BBB,, 6
语句怎么查询呢?
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuiniu0410 2012-11-01
  • 打赏
  • 举报
回复

select table1.a_id,(select table2.b_name from table2 where table1.b_id1=table2.b_id),
(select table2.b_name from table2 where table1.b_id2=table2.b_id),table1.atype
from table1;
ssqtjffcu 2012-10-31
  • 打赏
  • 举报
回复

with a as(
select 1 a_id,1 b_id1,2 b_id2,1 atype from dual
union all
select 2,1,3,2 from dual
union all
select 3,null,null,3 from dual
union all
select 4,null,2,4 from dual
union all
select 5,null,null,5 from dual
union all
select 6,4,null,6 from dual
),b as(
select 1 b_id,'LIU' b_name from dual
union all
select 2,'KAI' from dual
union all
select 3,'AAA' from dual
union all
select 4,'BBB' from dual
union all
select 5,'CCC' from dual
)
SELECT A_ID,(SELECT B_NAME FROM B WHERE B_ID=A.B_ID1) B_ID1,(SELECT B_NAME FROM B WHERE B_ID=A.B_ID2) B_ID2,ATYPE FROM A
A_ID B_ID1 B_ID2 ATYPE
---------- ----- ----- ----------
1 LIU KAI 1
2 LIU AAA 2
3 3
4 KAI 4
5 5
6 BBB 6

6 rows selected
supremeSi 2012-10-31
  • 打赏
  • 举报
回复
select A_ID,b1.B_NAME B_NAME1,b2.B_NAME B_NAME2,ATYPE from a,b b1,b b2
where a.B_ID1=b1.B_ID(+)
and a.B_ID2=b2.B_ID(+)
sesunny 2012-10-31
  • 打赏
  • 举报
回复
SELECT T1.A_ID,NVL(T2.B_NAME,'') AS ,B_NAME1,NVL(T3.B_NAME,'') AS ,B_NAME2,T1.ATYPE FROM A T1 LEFT JOIN B T2 ON T1.B_ID1 = T2.B_ID LEFT JOIN B T3 ON T1.B_ID2 = T3.B_ID ORDER BY T1.A_ID
長胸為富 2012-10-29
  • 打赏
  • 举报
回复

SELECT T1.A_ID,NVL(T2.B_NAME,'') AS B_NAME1,NVL(T3.B_NAME,'') AS B_NAME2,T1.ATYPE FROM A T1 LEFT JOIN B T2 ON T1.B_ID1 = T2.B_ID LEFT JOIN B T3 ON T1.B_ID2 = T3.B_ID ORDER BY T1.A_ID
長胸為富 2012-10-29
  • 打赏
  • 举报
回复
SELECT T1.A_ID,NVL(T2.B_NAME,'') AS ,B_NAME1,NVL(T3.B_NAME,'') AS ,B_NAME2,T1.ATYPE FROM A T1 LEFT JOIN B T2 ON T1.B_ID1 = T2.B_ID LEFT JOIN B T3 ON T1.B_ID2 = T3.B_ID ORDER BY T1.A_ID

小海葵1 2012-10-29
  • 打赏
  • 举报
回复
with A as
(
select '1' AS A_ID,'1' AS B_ID1,'2' AS B_ID2,'1' AS ATYPE from dual
union all
select '2' AS A_ID,'1' AS B_ID1,'3' AS B_ID2,'2' AS ATYPE from dual
union all
select '3' AS A_ID,' ' AS B_ID1,' ' AS B_ID2,'3' AS ATYPE from dual
union all
select '4' AS A_ID,' ' AS B_ID1,'2' AS B_ID2,'4' AS ATYPE from dual
union all
select '5' AS A_ID,' ' AS B_ID1,' ' AS B_ID2,'5' AS ATYPE from dual
union all
select '6' AS A_ID,'4' AS B_ID1,' ' AS B_ID2,'6' AS ATYPE from dual
),
B AS
(
select '1' AS B_ID,'LIU' AS B_NAME from dual
union all
select '2' AS B_ID,'KAI' AS B_NAME from dual
union all
select '3' AS B_ID,'AAA' AS B_NAME from dual
union all
select '4' AS B_ID,'BBB' AS B_NAME from dual
union all
select '5' AS B_ID,'CCC' AS B_NAME from dual
)

SELECT T1.A_ID,T2.B_NAME,T3.B_NAME,T1.ATYPE FROM A T1 LEFT JOIN B T2 ON T1.B_ID1 = T2.B_ID LEFT JOIN B T3 ON T1.B_ID2 = T3.B_ID ORDER BY T1.A_ID
changtianshuiyue 2012-10-29
  • 打赏
  • 举报
回复
select a.A_ID ,(select b.BNAME from B b where b.B_ID=a.A_ID1) B_NAME1,(select b.BNAME from B b where b.B_ID=a.A_ID2) B_NAME2,a.ATYPE from A a;
changtianshuiyue 2012-10-29
  • 打赏
  • 举报
回复
select a.A_ID ,(select b.BNAME from B b where b.B_ID=a.A_ID1),(select b.BNAME from B b where b.B_ID=a.A_ID2) ,a.ATYPE from A a;

17,377

社区成员

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

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