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