我在MySQL中有三个表。包含id
,name
,surname
,telephone
,adress
,id_work
字段的工作人员。
使用字段id
,name
。
缺少字段id
,name
,id_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但不起作用
答案 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;