求一条多表查询语句

paladinzhl 2009-11-26 09:09:44
小弟需求如下:
表user1,user2,user3,userStatus
前三个分别是对应不同角色的用户表,剔除其他字段,现假设有字段id和name(3个表都有,并且id是3个表共用一个sequence的。)userStatus有字段user_id,不管其他字段,userStates是在u1,u2,u3表分别在插入记录(建立用户)的时候,增加一条记录,并记录相应的user表中的id为user_id。

OK,需求来了:
我需要一个视图,里面要有4个字段,分别是user_id,u1_name,u2_name,u3_name。并且列出的总条数就是u1+u2+u3表记录的行数,或者userStatus表的行数。当user_id对应user1的id的时候,字段u1_name取user1表的name,其他字段就是null。以此类推。

注:表结构设计的不好,麻烦大家不要在表结构上讨论了。
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maitianhust 2009-11-26
  • 打赏
  • 举报
回复
这个应该可以。
[Quote=引用 1 楼 wildwave 的回复:]
其实这个视图好像完全用不上userstatus表

select id userid,name u1_name,null u2_name,null_u3_name from user1
union all
select id,null,name,null from dual
union all
select id,null,null,name from dual;
[/Quote]
BenChiM888 2009-11-26
  • 打赏
  • 举报
回复
这是我的试验结果,如果嫌顺序不好看自己加个order by d.USER_ID 上去。


[TEST@ora10gr1#2009-11-26/21:45:30] SQL>with
2 user1 as( select 1 id,'user1a' name from dual
3 union all
4 select 2 id,'user1b' name from dual
5 ),
6 user2 as( select 3 id,'user2a' name from dual
7 union all
8 select 4 id,'user2b' name from dual
9 ),
10 user3 as( select 5 id,'user3a' name from dual
11 union all
12 select 6 id,'user3b' name from dual
13 ),
14 userStatus as( select 1 user_id from dual
15 union all
16 select 2 user_id from dual
17 union all
18 select 3 user_id from dual
19 union all
20 select 4 user_id from dual
21 union all
22 select 5 user_id from dual
23 union all
24 select 6 user_id from dual
25 )
26 select d.user_id,a.name u1_name,b.name u2_name,c.name u3_name
27 from user1 a,user2 b,user3 c,userStatus d
28 where d.user_id=a.id(+)
29 and d.user_id=b.id(+)
30 and d.user_id=c.id(+)
31 ;

USER_ID U1_NAM U2_NAM U3_NAM
---------- ------ ------ ------
5 user3a
6 user3b
4 user2b
3 user2a
1 user1a
2 user1b

6 rows selected.

BenChiM888 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wildwave 的回复:]
其实这个视图好像完全用不上userstatus表

select id userid,name u1_name,null u2_name,null_u3_name from user1
union all
select id,null,name,null from dual
union all
select id,null,null,name from dual;
[/Quote]

我认为楼主好像是想要userstatus这个表里面其他的数据,只是为了说明问题举的例子。


select d.user_id,a.name u1_name,b.name u2_name,c.name u3_name
from user1 a,user2 b,user3 c,userStatus d
where d.user_id=a.id(+)
and d.user_id=b.id(+)
and d.user_id=c.id(+);


小灰狼W 2009-11-26
  • 打赏
  • 举报
回复
其实这个视图好像完全用不上userstatus表

select id userid,name u1_name,null u2_name,null_u3_name from user1
union all
select id,null,name,null from dual
union all
select id,null,null,name from dual;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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