左连接要么返回所有记录,要么无

时间:2014-09-18 15:56:00

标签: sql-server-2012 left-join sql

我有两张表DEPARTMENT和BUDGET。我想要返回所有部门,即使它们不在BUDGET表中。我正在使用以下查询,但它似乎没有按预期工作。

SELECT dept_name FROM department
LEFT JOIN budget ON budget.dept_id = department.dept_id
AND budget.division = 5 AND budget.year = 2015

上面的查询返回所有部门的部门而不仅仅是部门5.如果我使用WHERE子句,那么即使我使用LEFT JOIN也不会返回任何记录。我做错了什么?

SQL FIDDLE ADDED
http://sqlfiddle.com/#!2/d4b07/12

再次编辑

看起来我找到了我想要的查询。这将返回一个结果'法律'在我上面发布的SQL小提琴中,这就是我想要的。

SELECT DISTINCT D.name, B.budget_year FROM department D  
LEFT JOIN budget B ON D.ID = B.department_id   
AND D.division_id = B.division_id  
AND B.budget_year = 2015  
WHERE D.division_id = 11  

2 个答案:

答案 0 :(得分:1)

问题是您的部门ID不在部门表中。如果您在该表中有分区ID,请在where子句中使用它。

你想要所有部门,即使他们不在预算范围内,所以无论预算表是否存在,你都会得到部门

尝试:

SELECT dept_name FROM department
LEFT JOIN budget ON budget.dept_id = department.dept_id and budget.division = department.division AND budget.year = 2015
WHERE department.division = 5

答案 1 :(得分:0)

以下查询有效。

SELECT DISTINCT D.name, B.budget_year FROM department D
LEFT JOIN budget B ON D.ID = B.department_id 
AND D.division_id = B.division_id
AND B.budget_year = 2015
WHERE D.division_id = 11