两个表:员工和工资
即使工资表是空的,我也会从员工那里得到所有记录,但是当我在工资表上使用 where 时,它并不能让我全体员工。
如何让所有员工记录???????
SELECT `s`.`basic_salary`,`e`.`name`
FROM (`employees` as e)
LEFT JOIN `salaries` as s ON `s`.`employee_id`=`e`.`employee_id`
WHERE `s`.`session_id` = '19' AND `s`.`month_id` = '7'
GROUP BY `e`.`employee_id`
答案 0 :(得分:1)
第二个表的条件需要进入on
子句:
SELECT s.`basic_salary`, e.`name`
FROM `employees` e LEFT JOIN
`salaries` s
ON `s`.`employee_id`=`e`.`employee_id` AND
`s`.`session_id` = '19' AND `s`.`month_id` = '7'
GROUP BY e.`employee_id`
否则,您将外部联接转换为内部联接。
答案 1 :(得分:0)
您的查询中的WHERE
正在取消LEFT JOIN
的效果,因为您希望s.session_id
和s.month_id
具有价值。如果您想要的是过滤薪水为空或符合特定条件的员工,您可以尝试:
SELECT `s`.`basic_salary`,`e`.`name`
FROM (`employees` as e)
LEFT JOIN `salaries` as s ON `s`.`employee_id`=`e`.`employee_id`
WHERE (`s`.`session_id` = '19' AND `s`.`month_id` = '7' OR `s`.`employee_id` IS NULL)
GROUP BY `e`.`employee_id`