Sql server 2012 Left join要么返回所有记录,要么不返回任何记录

Sql server 2012 Left join要么返回所有记录,要么不返回任何记录,sql-server-2012,left-join,sql,Sql Server 2012,Left Join,Sql,我有两张部门和预算表。我想返回所有部门,即使它们不在预算表中。我正在使用下面的查询,但它似乎没有按预期工作 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,它也不会返

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

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小提琴

再次编辑

看起来我找到了我想要的查询。这是我在上面发布的SQL FIDLE中返回的一个结果“合法”,这就是我想要的结果

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  

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

您需要所有部门,即使它们不在预算中,因此无论是否存在预算表,您都会得到该部门

尝试:


下面的查询成功了

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

on
子句中,而不是在
where
子句中,对
budget
设置条件。我已经在
on
子句中使用
budget
,而不是
where
,但它不起作用。您应该使用示例数据和所需结果编辑问题。你的问题不一致。哦,我在部门表中有部门Id。完全忘记了。现在,如果我在和department.division=budget.division这样的条件下也使用这个,那么它不会带来任何记录。这就是您的查询的外观吗?我使用了此查询,它将带来所有记录,即使第5部分仅包含1条记录。已更改的查询。如果看不到数据,很难正确地写出来……对不起。如果这不起作用,那么您应该再次检查是否有第5部门。
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