2017-10-04 81 views
1

我有兩個表:程序和部門。MySQL有條件的「開」聲明

每個程序都屬於一個部門。扭曲的是,程序表有一個可選的字段叫做override_dept_id。當此字段不爲空時,它優先於department_id字段中的值。

我的查詢需要能夠檢查,如果override_dept_id字段爲空或不。這個結果決定了在部門表的連接中使用哪個鍵。我嘗試了幾種不同的方式,但我沒有正確地做某件事。

這裏就是我想要做:

SELECT p.id, p.program, p.full_name, d.department 
FROM programs p 
LEFT JOIN departments d 
CASE 
    WHEN p.override_dept_id IS NOT NULL THEN (ON p.override_dept_id = d.id) 
    ELSE (ON p.department_id = d.id) 
END 
ORDER BY p.full_name ASC 
+0

前穿上case statement –

+1

語法是['... table1 JOIN table2 ON condition ...'](https://dev.mysql.com/doc/refman/5.7/en/join.html)。 – axiac

回答

3

on關鍵字必須遵循的連接表 - 但你可以在邏輯移動到on條款本身:

SELECT p.id, p.program, p.full_name, d.department 
FROM  programs p 
LEFT JOIN departments d ON d.id = COALESCE(p.override_dept_id, p.department_id) 
ORDER BY p.full_name ASC 
+1

太棒了。這比通過一堆條件限制要好得多。 – Ravioli87