如果找不到,Mysql查询应返回空单元格

时间:2014-06-04 08:45:46

标签: php mysql

假设我有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)

4 个答案:

答案 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)