2014-09-18 70 views
0

我有两个表部门和预算。即使它们不在BUDGET表中,我也想返回所有部门。我正在使用以下查询,但它似乎没有按预期工作。如果我使用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。我究竟做错了什么?

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

再次编辑

看起来像我发现我想要的查询。这是我在上面发布的SQL小提琴中返回的一个结果'Legal',这是我想要的。

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 
+0

将条件放在on子句而不是where子句中。 – 2014-09-18 15:57:36

+0

我已经在'on'子句中使用'budget'而不是'where',但它不起作用。 – 2014-09-18 16:11:55

+0

您应该使用样本数据和期望的结果编辑问题。你的问题是不一致的。 – 2014-09-18 17:36:35

回答

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 
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 
+0

哦,我在部门表中有Division Id。完全忘记了这一点。现在,如果我在AND department.division = budget.division等条件下也使用它,那么它不会带来任何记录。 – 2014-09-18 16:08:04

+0

用查询更新答案。这是你的查询看起来如何? – 2014-09-18 16:12:06

+0

我使用了这个查询,即使第5部分只包含1条记录,它也会带来所有记录。 – 2014-09-18 16:14:06

相关问题