我有表Users
查找出現在SQL服務器中所有部門的所有用戶?
我也有表Departments
我有Users
和Departments
之間的映射表。
我想找到的所有用戶名和標識出現在所有部門。
例如,如果有5個部門,Paul只在部門#1中,所以Paul不會出現在輸出列表中。
他會的,只有當他在各部門(1..5)上市
我開始使用臨時表做一些事情,這是非常長(readly長),我認爲有一個更好的辦法。
我也創建了一個Sql Fiddle。
我有表Users
查找出現在SQL服務器中所有部門的所有用戶?
我也有表Departments
我有Users
和Departments
之間的映射表。
我想找到的所有用戶名和標識出現在所有部門。
例如,如果有5個部門,Paul只在部門#1中,所以Paul不會出現在輸出列表中。
他會的,只有當他在各部門(1..5)上市
我開始使用臨時表做一些事情,這是非常長(readly長),我認爲有一個更好的辦法。
我也創建了一個Sql Fiddle。
有多種方法可以做到這一點。
您可以要求用戶在部門的數量等於部門總數:
SELECT
*
FROM
Users
INNER JOIN
(
SELECT userId, COUNT(*) c FROM MapUserstoDepartments
GROUP BY userId
HAVING COUNT(*) = (SELECT COUNT(*) FROM Departments)
) UsersInAllDepartments
ON Users.userId = UsersInAllDepartments.userId
你可能需要從各部門的列表中刪除用戶的部門留下任何:
SELECT *
FROM Users
WHERE NOT EXISTS
(
SELECT depId FROM Departments
EXCEPT
SELECT depId FROM MapUserstoDepartments WHERE userId = Users.userId
)
我確定還有其他人。
這是你想要的嗎?
Select Tbl.userID , Tbl.username from (Select u.userid , u.username ,
count(u.userid) as Count from MapUsersToDepartments m
inner join Users u on m.UserID = u.userID
group by u.userid , u.username)Tbl
where Tbl.Count = (Select count(*) from Departments)
這裏是小提琴
試試這個
SELECT u.userId, u.UserName
FROM MapUserstoDepartments m INNER JOIN
Users u ON u.userId = m.userId
GROUP BY u.userId, u.UserName
HAVING COUNT(m.depId) = (SELECT COUNT(*) FROM Departments)
這將產生
| USERID | USERNAME |
---------------------
| 100 | John |
select
Users.userId,
count(Departments.depId),
count(MapUserstoDepartments.userId)
from
Users
left join MapUserstoDepartments on MapUserstoDepartments.userId = Users.userId
left join Departments on Departments.depId = MapUserstoDepartments.depId
group by
Users.userId
having
(SELECT COUNT(*) from Departments) = count(MapUserstoDepartments.userId)
你可以這樣說:
select u.*
from Users u
where not exists
(
select 1
from Departments d
where not exists
(
select 1
from MapUserstoDepartments m
where d.depId = m.depId
and m.userId = u.userId
)
)
可以嘗試下面的查詢。讓我知道這是否會有所幫助
select * from users where userid in
(select userid from MapUserstoDepartments
group by userid
having count(userid) = 5)