MySQL 条件 "ON" 语句

MySQL Conditional "ON" Statement

我有两个 table:程序和部门。

每个项目属于一个部门。不同之处在于,程序 table 有一个名为 override_dept_id 的可选字段。当此字段不为空时,它优先于 department_id 字段中的值。

我的查询需要能够检查 override_dept_id 字段是否为空。其结果决定部门 table 的连接使用哪个密钥。我尝试了几种不同的方法,但我没有做正确的事情。

这是我正在尝试做的事情:

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

on 关键字必须跟在加入的 table 之后 - 但您可以将逻辑移至 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