2017-10-04 2 views
1

두 개의 테이블 : 프로그램 및 부서가 있습니다.MySQL 조건부 "ON"문

각 프로그램은 하나의 부서에 속합니다. 프로그램 테이블에는 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

전에 넣어 case 문 –

+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