2015-11-03 59 views
1

我有以下SQL查询:选择命令,用户ID不会出现在另一个表

SELECT users.user_id, 
     users.first_name, 
     users.last_name, 
     roles.role, 
     roles.role_id, 
     users.username, 
     users.description, 
     users_vs_teams.team_id, 
     teams.team_name, 
     teams.status 
FROM users 
    INNER JOIN roles ON users.role_id = roles.role_id 
    INNER JOIN users_vs_teams ON users.user_id = users_vs_teams.user_id 
    INNER JOIN teams ON users_vs_teams.team_id = teams.team_id 
WHERE(users.role_id = 3) 

此查询显示谁拥有它们已经被分配了一个冲刺的3用户角色和团队的所有用户由于他们的user_id出现在users_vs_teams表中。但是,我想显示与此相反的显示那些角色为3但在users_vs_teams表中找不到user_id的用户。

任何帮助将不胜感激。

回答

1
SELECT users.user_id, 
     users.first_name, 
     users.last_name, 
     roles.role, 
     roles.role_id, 
     users.username, 
     users.description 
FROM users 
     INNER JOIN roles ON users.role_id = roles.role_id 
     LEFT JOIN users_vs_teams ON users.user_id = users_vs_teams.user_id 
WHERE users.role_id = 3 
     AND users_vs_teams.user_id IS NULL 
+0

谢谢,这工作完美。 – mcclosa

+0

你甚至不需要零件:INNER JOIN角色ON users.role_id = roles.role_id – JBrooks

+1

在我的aspx文件中,我希望显示每个人的角色,即使他们都是相同的,但它是需要的由客户。 – mcclosa

0
SELECT users.user_id, users.first_name, users.last_name, roles.role, roles.role_id, users.username, users.description, users_vs_teams.team_id, teams.team_name, teams.status 
FROM users INNER JOIN roles ON users.role_id = roles.role_id 
      INNER JOIN users_vs_teams ON users.user_id <> users_vs_teams.user_id 
      INNER JOIN teams ON users_vs_teams.team_id = teams.team_id 
WHERE (users.role_id = 3) 
0

更改为左外连接并向where子句添加另一个条件。左外部联接从左侧的表中(这里是用户)获取所有行,并且条件确保只有那些行在右侧表(这里是users_vs_teams)中没有合适匹配的情况下出现。在下面的查询中,您将不得不将另外的where子句条件中的“pk”更改为users_vs_teams表的主键的实际列。

SELECT users.user_id, users.first_name, users.last_name, roles.role, roles.role_id, users.username, users.description, users_vs_teams.team_id, teams.team_name, teams.status 
FROM users 
     INNER JOIN roles ON users.role_id = roles.role_id 
     INNER JOIN teams ON users_vs_teams.team_id = teams.team_id 
     LEFT OUTER JOIN users_vs_teams ON users.user_id = users_vs_teams.user_id 
WHERE (users.role_id = 3) 
     AND users_vs_teams.pk IS NULL 
0

使用LEFT JOIN代替,并通过WHERE条款加入AND users_vs_teams.user_id IS NULL,与你可以得到你想要的东西得到所有NULL ID在users_vs_teams表。

SELECT users.user_id, 
     users.first_name, 
     users.last_name, 
     roles.role, 
     roles.role_id, 
     users.username, 
     users.description, 
     users_vs_teams.team_id, 
     teams.team_name, 
     teams.status 
    FROM users 
     INNER JOIN roles ON users.role_id = roles.role_id 
     INNER JOIN teams ON users_vs_teams.team_id = teams.team_id 
     LEFT JOIN users_vs_teams ON users.user_id = users_vs_teams.user_id 
    WHERE(users.role_id = 3) 
    AND users_vs_teams.user_id IS NULL 
相关问题