簡體   English   中英

SQL:檢索所有已加入的記錄

[英]SQL: Retrieve all records where has all joined

抱歉,沒想到更好的標題。

我在Oracle XE中有3個表。 一個EMPLOYEE表,一個PROJECT表和一個WORK_ON表。 員工可以工作很多項目。 我正在嘗試獲取在所有項目中工作的員工姓名。

EMPLOYEE Table
Emp_ID   EMP_Name
1        Esther
2        Peter
3        Joan
4        Roger
5        Liam

PROJECT Table
Project_ID
1
2
3

WROKS_ON Table
Emp_ID       Project_ID
1            3
2            1
2            2
2            3
3            1
3            2
4            1
4            2
4            3

給定領域,我的結果應該是彼得羅傑

從以下內容開始,但陷入困境:

SELECT EMP_NameLOYEE.E_NAME
FROM EMP_NameLOYEE INNER JOIN 
(PROJECT INNER JOIN WROKS_ON ON PROJECT.Project_ID = WROKS_ON.Project_ID) ON 
EMP_NameLOYEE.Emp_ID = WROKS_ON.Emp_ID
WHERE WROKS_ON.Project_ID In (SELECT DISTINCT Project_ID FROM PROJECT);

顯然,這會檢索重復的每個項目上工作的所有雇員的姓名,但不是我想要的名字。

您需要使用cross join left join員工和項目的所有組合,然后left join Works表,並檢查每個e_name的行數。

SELECT e.E_NAME
FROM EMPLOYEE e
CROSS JOIN PROJECT p
LEFT JOIN WORKS_ON w ON p.Project_ID = w.Project_ID and e.emp_id=w.emp_id
GROUP by e.E_NAME
HAVING COUNT(*)=COUNT(w.project_id)

您可以將項目表保留在其中。

SELECT e.emp_id, COUNT(project_id)
FROM employee e
INNER JOIN works_on wo ON wo.emp_id = e.emp_id
GROUP BY e.emp_id
HAVING COUNT( project_id ) = (SELECT COUNT(*) FROM project);

SQL小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM