Coder编程
2017-04-23 02:11
采纳率: 50%
浏览 802

求问一个Oracle 查询语句如何写!

问题是这样的:
我有三张表:用户表,留言表,附件表。
表结构如下:
用户表:
create table t_user(
u_id int primary key, --编号
u_username varchar2(50), --客户名称
u_password varchar2(50), --客户密码
u_nickname varchar2(50), --客户的昵称 1、普通用户,3表示超级管理员,0表示匿名用户
u_type int, --客户类型 1、普通用户,3表示超级管理员
u_status int, --客户状态 有停用和启用两种状态:0表示启用,1表示停用
u_email varchar2(50), --客户邮箱
u_hiddenMsg int, --客户是否能发信息 0表示不禁止,1表示禁止
u_createDate date --客户的创建时间
)
留言表:
create table t_message(
m_id int, --留言信息的编号
m_title varchar2(200), --留言信息的题目
m_content clob, --留言信息的内容
m_create_date date, --留言信息的创建时间
u_id int --客户的编号
)
附件表:
create table t_attachment(
a_id int PRIMARY KEY, --附件编号
a_newName varchar2(100), --附件新名称
a_oldName varchar2(100), --附件原始名称
a_content_type varchar2(100), --附件类型
a_create_date date, --创建时间
m_id int --留言编号
)

如何写SQL语句达到:

显示所有用户的留言和附件。用户可能有多个留言,留言里面可以有附件可以有多个附件也可以没有附件。

效果如图:
图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 欧阳嘉 2017-04-23 07:52
    已采纳

    insert into t_user values(1,'use1','123','user1',1,0,'test@qq.com',0,now());
    insert into t_user values(2,'use2','123','user2',1,0,'test@qq.com',0,now());

    insert into t_message values(1,'msg11','content11',now(),1);
    insert into t_message values(2,'msg12','content12',now(),1);
    insert into t_message values(3,'msg21','content21',now(),1);
    insert into t_message values(4,'msg22','content22',now(),1);

    insert into t_attachment values (1,'attach1','attach1','zip',now(),1);
    insert into t_attachment values (2,'attach2','attach1','zip',now(),1);

    select t_message.m_id,a_id from t_message,t_attachment where t_message.m_id = t_attachment.m_id;
    select t_message.u_id,m_id from t_user,t_message where t_message.u_id = t_user.u_id;
    #left join可以满足你的要求,右侧对附件表的连接,没有附件的话会补NULL
    select * from ((select t_message.u_id,m_id from t_user,t_message where t_message.u_id = t_user.u_id) as a left join (select t_message.m_id,a_id from t_message,t_attachment where t_message.m_id = t_attachment.m_id) as b on a.m_id = b.m_id);

    u_id | m_id | m_id | a_id
    ------+------+------+------
    1 | 1 | 1 | 1
    1 | 1 | 1 | 2
    1 | 2 | |

    1 | 3 | |

    1 | 4 | |

    (5 rows)

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq2443393175 2017-04-23 02:48

    三张表关联查询,留言表做主体,留言表的客户编号和用户表里的客户编号关联,获取用户信息,留言差不多

    评论
    解决 无用
    打赏 举报
  • Coder编程 2017-04-23 09:42

    select * from ((select t_message.u_id,m_id from t_user,t_message where t_message.u_id = t_user.u_id) a
    left join (select t_message.m_id,wm_concat(a_id) from t_message, t_attachment where t_message.m_id = t_attachment.m_id group by t_message.m_id) b on a.m_id = b.m_id);

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题