2015-04-17 87 views
1

我想取消所有没有项目的员工和没有员工的项目。我不知道我在哪里做错了。MySQL:员工没有项目和没有员工的项目

表结构:

员工:EMPLOYEE_ID(PK),employee_name //所有员工

项目:project_code(PK),PROJECT_TITLE //所有项目

project_team:project_code(FK) employee_id(FK)//项目和员工的桥接表正在使用中。

这是我的查询:

SELECT * 
FROM employee e 
    LEFT JOIN project_team pt USING (employee_id) WHERE pt.`project_code` IS NULL 
    INNER JOIN project p USING (project_code) WHERE (e.`employee_id` IS NULL) 
+0

这需要2个查询。 –

+0

我想要做的1查询@AbhikChakraborty –

+0

然后在这两个查询之间使用UNION ... – Marki555

回答

0

你可能想是这样的:

SELECT employee_id AS id_or_code, employee_name AS name_or_title FROM employee e LEFT JOIN project_team pt ON e.employee_id = pt.employee_id WHERE pt.project_code is NULL 

UNION ALL 

SELECT project_code AS id_or_code, project_title AS name_or_title FROM project p LEFT JOIN project_team pt ON p.project_code = pt.project_code WHERE pt.employee_id is NULL; 

这种方式,你有两列第一列是员工的id或查询结果代码或项目,第二列作为员工的名称或项目的标题。

+0

此查询有错误... –

+0

对不起,误解了要求,代码现在是固定的。 – mfdev

0

您正试图合并2个不同的选择记录到一个结果集,一个方法是使用UNION ALL,然后标记每个记录类型的东西作为

select 
e.employee_id as id , 
e.employee_name as name, 
'Employee' as type 
from employee e 
left join project_team pt on pt.employee_id = e.employee_id 
where pt.employee_id is null 
union all 
select 
p.project_code as id , 
p.project_title as name, 
'Project' as type 
from project p 
left join project_team pt on pt.project_code = p.project_code 
where pt.project_code is null ; 

下面是测试情况

mysql> select * from employee ; 
+-------------+---------------+ 
| employee_id | employee_name | 
+-------------+---------------+ 
|   1 | A    | 
|   2 | B    | 
|   3 | C    | 
|   4 | D    | 
|   5 | E    | 
+-------------+---------------+ 
5 rows in set (0.00 sec) 

mysql> select * from project ; 
+--------------+---------------+ 
| project_code | project_title | 
+--------------+---------------+ 
|   1 | P1   | 
|   2 | P2   | 
|   3 | P3   | 
|   4 | P4   | 
+--------------+---------------+ 
4 rows in set (0.00 sec) 

mysql> select * from project_team ; 
+--------------+--------------+ 
| project_code | employee_id | 
+--------------+--------------+ 
|   1 |   1 | 
|   1 |   2 | 
|   2 |   3 | 
|   2 |   4 | 
|   3 |   2 | 
|   3 |   1 | 
|   3 |   3 | 
+--------------+--------------+ 

运行上面的查询将会给你

+------+------+----------+ 
| id | name | type  | 
+------+------+----------+ 
| 5 | E | Employee | 
| 4 | P4 | Project | 
+------+------+----------+