我的问题是这样的:(环境ORACLE)
现在有两张关联表
其中表A结构数据如下:
AID ANAME
1 身高
2 体重
3 年龄
4 出生地表B结构数据如下
BID BNAME
1 小张
2 小王
而表C结构数据如下:
CID AID CVALUE BID
1 1 170 1
1 2 80 2现在想得到的查询结果是:
视图D(这是小张的数据)
AID ANAME CVALUE
1 身高 170
2 体重 空
3 年龄 空
4 出生地 空结果的意思也就是,如果要找一个人的信息,比方小张的,那么先列出表A中的所有数据,再到表C中根据表B中小张的编号和表A中各属性的编号找对应的值,如果没有找到对应的值就用空来填补视图D中的属性值,也就是说当表C中没有小张的任何属性值时,最后显示的视图也要把表A中所有数据列出,并将CVALUE值赋空值。请理解我的意思。 表A存放的是所有人员参数列表,表B存放的是人员列表,表C存放的是针对人员参数的值。而最后要得到的是某个人员所有参数的值,如果表C中没这个人员的值也要补空值。谢谢(100分)
现在有两张关联表
其中表A结构数据如下:
AID ANAME
1 身高
2 体重
3 年龄
4 出生地表B结构数据如下
BID BNAME
1 小张
2 小王
而表C结构数据如下:
CID AID CVALUE BID
1 1 170 1
1 2 80 2现在想得到的查询结果是:
视图D(这是小张的数据)
AID ANAME CVALUE
1 身高 170
2 体重 空
3 年龄 空
4 出生地 空结果的意思也就是,如果要找一个人的信息,比方小张的,那么先列出表A中的所有数据,再到表C中根据表B中小张的编号和表A中各属性的编号找对应的值,如果没有找到对应的值就用空来填补视图D中的属性值,也就是说当表C中没有小张的任何属性值时,最后显示的视图也要把表A中所有数据列出,并将CVALUE值赋空值。请理解我的意思。 表A存放的是所有人员参数列表,表B存放的是人员列表,表C存放的是针对人员参数的值。而最后要得到的是某个人员所有参数的值,如果表C中没这个人员的值也要补空值。谢谢(100分)
其中表A结构数据如下:
AID ANAME (人员参数表)
1 身高
2 体重
3 年龄
4 出生地 表B结构数据如下 (人员表)
BID BNAME
1 小张
2 小王
而表C结构数据如下: (人员参数值表)
CID AID CVALUE BNAME
1 1 170 小张
1 2 80 小王 现在想得到的查询结果是:
视图D(这是小张的数据)
AID ANAME CVALUE BNAME
1 身高 170 小张
2 体重 空 小张
3 年龄 空 小张
4 出生地 空 小张上面,在表C中其实小张的记录只有一条,也就是身高170的信息,而最后得到的结果要求列出小张的所有参数值。因为只有身高有数据,所以其它用空值来补。
create or replace view d as
select a.aid,a.aname,t.cvalue
from (select c.* from b,c where c.bid=b.bid and b.bname='&name') t,a
where t.aid(+)=a.aid不知道你表的cvalue是什么类型,
个人感觉,你的表建的很不爽
FROM B, A LEFT JOIN C ON A.AID = C.AID
WHERE C.BID =B.BID
AND B.BNAME = '小张';
FROM B, A LEFT JOIN C ON A.AID = C.AID
WHERE C.BID =B.BID
AND B.BNAME = '小张';
from A a
left join (select b.BID, B.BName, c.CID, a.AID, c.CValue
from B b
join C c on b.BName = c.BName
where b.BName = '小张') t on t.AID = a.AID
在Oracle 里 应该这么写!
你的表设计的有问题,不符合3范式。
如果B表里有两个人叫小张 你的数据库就会出问题了。
B表的主键做C表的外键才不会出现更新异常
select t1.aid,t1.aname,b.cvalue from t1 left join
(select * from t3 where bid in
(select bid from t2 where bname='小张')
) b
on t1.aid=b.aid