在 SQL 加入中需要帮助

Need help in SQL join

我有两个表,里面有如下记录:

            User
   ---------------------
         ID     UserId
   ---------------------
          1      User1
          2      User2

          Department_User
   ------------------------------
         ID DEPT_ID       USER_ID
   ------------------------------
          1  1              1
          2  2              1
          3  1              2

现在我想要一个 oracle 查询,它将 return 仅在两个部门(1 和 2)服务的用户,在这个例子中它将是 1

这是一个集内集查询的例子。我喜欢使用 group byhaving 来解决这些问题。这是一种方法:

select user_id
from department_user
where dept_id in (1, 2)
group by user_id
having count(distinct dept_id) = 2;
select du1.user_id
from department_user du1
where exists (
select *    from department_user du2
where dept_id= 2  on   du1.user_id = du2.user_id);
and du1.dept_id = 1

select user_id
from department_user
where dept_id = 1
and user_id in (
select user_id
from department_user
where dept_id= 2);

select du1.user_id
from department_user du1
join department_user du2 on du1.user_id = du2.user_id
where du1.dept_id=1 and  du2.dept_id = 2

我不知道 Oracle,但 where exists 版本可能是 SQL 服务器中最快的版本。如果您需要 dept_id = 2 的记录中的字段以及 dept_id = 1

的记录中的字段,则需要连接版本

我认为你应该在 where 子句中使用 "AND" 运算符来确保 select 语句满足这两个条件..尝试下面的查询...

  Select U.ID, U.UserId
  From User U 
  Inner Join Department_User D 
  On U.ID=D.USER_ID 
  Where D.DEPT_ID =1 And D.DEPT_ID = 2
SELECT USER_ID
FROM
(
SELECT USER_ID, DEPT_ID
FROM TABLE
GROUP BY USER_ID, DEPT_ID
HAVING COUNT(*) = (SELECT COUNT(DISTINCT DEPT_ID) FROM TABLE)
)