我有两个表:程序和部门。
每个程序属于一个部门。扭曲是,程序表有一个名为override_dept_id的可选字段。如果此字段不为null,则它优先于department_id字段中的值。
我的查询需要能够检查override_dept_id字段是否为null。其结果决定了在departments表的连接中使用了哪个键。我尝试了几种不同的方法,但我没有正确地做某事。
以下是我要做的事情:
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 :(得分: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