假设我有10个用户,3个用户可以访问应用程序,而其他7个用户也没有。我想要显示所有10个用户,有权访问的用户和不访问的用户。结果应如下所示:
id name email role
1 user1 user1@user1.com Super Admin
2 user2 user2@user2.com Super Admin
5 user5 user5@user5.com Super Admin
....
10 user10 user10@user10.com 0
我的查询工作正常,但只返回前3位有角色的用户。所以我需要看到那些没有角色的人。
SELECT u.id, u.name, u.email, appr.role
FROM users as u
JOIN users_application_roles as appr ON u.id=appr.user_id AND (SELECT id from applications where key='testkey' and appr.application_id=id)
答案 0 :(得分:2)
我猜你要找的是“外连接”。只需使用“JOIN”子句隐式调用“内连接”子句。
答案 1 :(得分:2)
然后您必须使用LEFT JOIN,因为没有角色的用户不会存在于您的users_application_roles
- 表中。您的查询应该是:
SELECT u.id, u.name, u.email, appr.role
FROM users as u
LEFT JOIN users_application_roles as appr ON u.id=appr.user_id AND (SELECT id from applications where key='testkey' and appr.application_id=id)
答案 2 :(得分:1)
我认为使用LEFT OUTER JOIN而不是JOIN你会没事的。
答案 3 :(得分:1)
SELECT
u.id,
u.name,
u.email,
appr.role
FROM
users AS u
LEFT OUTER JOIN users_application_roles AS appr
ON u.id = appr.user_id
AND
(SELECT
id
FROM
applications
WHERE KEY = 'testkey'
AND appr.application_id = id)