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
我有两个 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