三个表 A B C
A 有id
B 有Bid, Bname
C 有Cid, Cname
现在插入数据
A
id
---
001B
Bid Bname
----
001 Bname1C
Cid, Cname
---
101 Cname1
102 Cname2SQL
select C.Cname
from A,B,C
where A.id = B.Bid
or A.id = C.Cid为什么结果是
Cname1,Cname2我想实现的功能是取一个名字。
如果B表中有对应纪录就取B.Bname
如果C表中有对应纪录就取C.Cname除了union有没有别的办法,union的话sql太长
A 有id
B 有Bid, Bname
C 有Cid, Cname
现在插入数据
A
id
---
001B
Bid Bname
----
001 Bname1C
Cid, Cname
---
101 Cname1
102 Cname2SQL
select C.Cname
from A,B,C
where A.id = B.Bid
or A.id = C.Cid为什么结果是
Cname1,Cname2我想实现的功能是取一个名字。
如果B表中有对应纪录就取B.Bname
如果C表中有对应纪录就取C.Cname除了union有没有别的办法,union的话sql太长
解决方案 »
- oracle 全文索引怎么删除
- 触发器无效
- sql取最后三条记录怎么取?
- oracle 安装问题?
- trim可以截取数字,但不能截取字符,有没有像trim一样可以截取字符的???
- 这句sql有什么问题,帮忙看一下,谢了
- 如何在 ORACLE SQL *PLUS 中建立存储过程?
- 急!急!]为什么在pl/sql中使用desc tablename命令不好使?弹出错误提示"ORA-01460:未实现或无理的转换请求"??
- 使用dbms_sql程序包的用户需要什么权限?
- oracle 同时使用order by 和 group by 报不是一组表达式
- oracle 存储过程 插入语句 急!!!!!!!!!!!!
- 函数问题。
from a,b,c
where a.id=b.id(+)
and a.id=c.id(+)
如果B表中有对应纪录就取B.Bname
如果C表中有对应纪录就取C.Cname
---------如果B,C表都有取哪个?
select distinct name from
(
select B.Bname name from A,B where A.id = B.Bid
union all
select C.Bname name from A,C where A.id = C.Cid
) t--使用union自动合并重复项
select B.Bname name from A,B where A.id = B.Bid
union
select C.Bname name from A,C where A.id = C.Cid
SQL:
select distinct
A.aid,
decode(B.bid,A.aid,B.bname,C.cname) as abc_name
from A,
B,
C
where A.aid = B.bid
or A.aid = C.cid;
AID ABC_NAME
--- --------
001 bname1
from A,B,C
where true; 结果自然是C里面的Cname了。
2)要得到想要的结果用Decode是不错的选择~~