我需要执行SQL查询,将表1中的用户拉出来,而不是表2中的用户,或者不是表2中的特定子集。
以下是我所拥有的:
表ClientUsers
ID UserName
1种亚铁User1
2.亚基User2
3.亚基User3
4.亚基User4
5.亚基User5
表UserRoles
ClientUsersID ClientRolesID
/T1391-1991商业商品的商品、商品、商业、金融、商业、金融、金融、商业、金融、商业、金融等行业
2
5
我需要选择所有的用户,或者是在UsersRoles中,任何不是ClientRoleID的ClientRoleID,或者根本不是用户角色的用户。
所以在这种情况下,我会选择用户1和3-5。1和5是因为它们在表UserRoles中,角色不是166,而3和4是因为它们在表ClientUsers中,而不是表UserRoles中。
我无法在WHERE语句中使用null,因为它在列中查找空值,而不是不存在的行。
我认为我必须使用一个完整的外部联接,然后缩小结果,但我还没有找到一个有效的查询。
SELECT * FROM dbo.ClientUsers
FULL OUTER JOIN dbo.UserRoles on ClientUsers.ID = UserRoles.ClientUsersID
WHERE UserRoles.ClientRolesID != 166 OR [value not in right table]我不知道如何用能够工作的东西替换这个括号(或者完全重新执行查询)。
发布于 2017-10-31 21:48:56
使用not exists
SELECT cu.*
FROM dbo.ClientUsers cu
WHERE NOT EXISTS (SELECT 1
FROM dbo.UserRoles ur
WHERE cu.ID = ur.ClientUsersID AND ur.ClientRolesID = 166
);这几乎是你的问题陈述的直接翻译。
发布于 2017-10-31 22:02:46
这个怎么样?
SELECT *
FROM dbo.ClientUsers
FULL OUTER JOIN dbo.UserRoles on ClientUsers.ID = UserRoles.ClientUsersID
WHERE UserRoles.ClientRolesID != 166 or UserRoles.ClientRolesID is NULL;https://stackoverflow.com/questions/47044993
复制相似问题