首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双外连接?

问双外连接?
EN

Stack Overflow用户
提问于 2015-01-05 08:58:51
回答 2查看 124关注 0票数 1

我认为这是一个很简单的问题,但我遗漏了一些东西。

我有三张桌子:

代码语言:javascript
复制
t_users : user_id, user_name
t_users_modules : user_id, module_id
t_modules : module_id, module_name

我希望为每个module_name输出一个所有user_name的列表,并检查这个用户在t_users_modules表中是否确实拥有这个权限。

是交叉连接吗?我从来没用过。

我试了两个左外连接,但没有成功。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-05 09:03:06

是的,您使用交叉连接来生成所有的可能性,然后使用左联接来测试是否存在所需的行:

代码语言:javascript
复制
select module_name, user_name,
     CASE WHEN um.user_id is not null THEN 1 ELSE 0 END as HasRight
from
   t_users u
       cross join
   t_modules m
       left join
   t_user_modules um
       on
           u.user_id = um.user_id and
           m.module_id = um.module_id

顺便说一句,如果您使用t_作为某种形式的前缀来标识表,我建议删除它--在SQL中的几乎所有地方,对象的类型都可以从该对象出现在语句中的位置识别。唯一的例外是表和视图是无法区分的--但这是一件好事--它们一般不应该被区分开来。

票数 2
EN

Stack Overflow用户

发布于 2015-01-05 09:13:52

代码语言:javascript
复制
select t1.user_name,t3.module_name,
CASE WHEN t1.user_id is not null then 1 else 0 end as "Has Right"
from t_users t1
join t_users_modules t2
on(t1.user_id=t2.user_id)
join t_modules  t3
on (t2.module_id=t3.module_id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27776145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档