查询问题

fdm_sea 2005-06-29 10:15:17
表大概是这样

TABLE_MESSAGE ( MID, userID, roleID, content...)
TABLE_USER (userID, userName...)
TABLE_ROLE (roleID, roleName....)
TABLE_USERROLE(userID,roleID)

之间的关系是一个用户只有一个userID,但是可以对应多个roleID, MESSAGE表中的userID是发送人的id,而roleID是接收角色的id,也就是说发消息的时候是按角色发给>=1个用户.

现在要为登陆用户建一个消息列表,要列出发给自己所在角色的消息和自己发出的消息,手头可以用的只有自己的userID.
之间的关系我比较清楚了,就是sql不知道怎么写好,开始这么弄:

假如我的userID是1
SELECT * FROM TABLE_MESSAGE tm WHERE tm.userID=1 AND tm.roleID=
(SELECT ur.roleID FROM TABLE_USERROLE ur WHERE tm.userID=ur.userID)
可是不对... 对oracle sql不是太熟,我估计是子查询返回的是一个集合的缘故,

后来想到这样就算查出来了,如果还要显示roleName,难道还要再次查询TABLE_ROLE???
难怪我的页面出来这么慢...

哪位可以指点指点,多谢~~
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdm_sea 2005-07-01
  • 打赏
  • 举报
回复
嗯,老问题是解决了,但是现在头说不能按roleID,改成按roleName

即,如果消息的userID对应的roleID中,roleName符合某种条件的(假如roleName必须是xxx_超级用户),才能把该消息列出来 -_-!!

这时该怎么办?? 我要先找到自己角色的名字中含有xxx_超级用户字符,再找到相应roleID,再根据上面的方法找出列表

天哪, 大哥大姐们, 这能在一个sql语句中做吗!!!
数据库是oracle
沝林 2005-06-30
  • 打赏
  • 举报
回复
SELECT tm.*,tr.roleName FROM TABLE_MESSAGE tm, TABLE_USERROLE ur ,TABLE_ROLE tr
WHERE tm.userID = ur.tm.userID AND tm.roleID = ur.roleID and ur.roleID = tr.roleID and tm.userID=1
zsfww1205 2005-06-30
  • 打赏
  • 举报
回复
SELECT * FROM TABLE_MESSAGE tm WHERE tm.userID=1 or tm.roleID in
(SELECT ur.roleID FROM TABLE_USERROLE ur WHERE tm.userID=ur.userID)
要列出发给自己所在角色的消息和自己发出的消息
自己发的就是TABLE_MESSAGE中userID=1
发给自己所在角色的消息 就是TABLE_MESSAGE中roleID=1
这样,
SELECT * FROM TABLE_MESSAGE tm WHERE tm.userID=1 or tm.roleID = 1
不久全部找出来了??

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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