MySQL

时间:2017-07-21 14:09:36

标签: mysql sql

我在MySQL中有三个表。包含idnamesurnametelephoneadressid_work字段的工作人员。

使用字段idname

缺少字段idnameid_staff

我有以下查询

SELECT COUNT(*) 
FROM staff s, work w, absence a 
WHERE s.id=a.id_staff 
AND s.id_work=w.id 
AND w.name='sales manager' 
AND a.name='disease'.

上述查询返回有销售职位且生病的员工。

是否有办法退还相反的结果,即有销售但没有生病的员工?

我将where子句改为where not clause但不起作用

2 个答案:

答案 0 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

解决此问题的一种方法是使用LEFT JOIN

SELECT COUNT(*)
FROM staff s JOIN
     work w
     s.id_work = w.id LEFT JOIN
     absence a 
     ON s.id = a.id_staff AND a.name = 'disease'
WHERE w.name='sales manager' AND a.id_staff IS NULL;

答案 1 :(得分:0)

你也应该避免“交叉加入”。除非有必要:

SELECT COUNT(*)
FROM staff s 
INNER JOIN work w ON s.id_work = w.id 
LEFT JOIN absence a ON s.id = a.id_staff 
WHERE w.name='sales manager' 
AND a.name = 'disease' 
AND a.id_staff IS NULL;