在 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 by
和 having
来解决这些问题。这是一种方法:
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)
)
我有两个表,里面有如下记录:
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 by
和 having
来解决这些问题。这是一种方法:
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)
)