2014-09-18 72 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

相關問題