2016-09-26 3 views
0

tbl_doctors_details, tbl_timetbl_token 세 개의 테이블이 있습니다.postgresql에서 CASE, WHEN, THEN을 사용하여 쿼리가 작동하지 않습니다.

tbl_time 또는 tbl_token에서 세부 정보를 선택해야합니다. 병원의 특정 의사가 t_type 인 경우 time 일 경우 tbl_time 중에서 선택하고 tbl_token을 선택합니다.

예를 들어, doctor_id이 100이고 hospital_id1 인 경우, t_typetime입니다. 따라서이 사용자의 경우 세부 정보는 tbl_time 표에서 선택해야합니다.

enter image description here enter image description here

가 어떻게 여기 쿼리에서 CASE 조건을 사용할 수 있습니다

아래 세 개의 테이블의 샘플 구조와 데이터는?

내가 시도 :

SELECT * 
FROM 
(SELECT * CASE WHEN t_type= 'time' FROM dbname.tbl_doctors_details t1 THEN 
      dbname.tbl_time t2 
      ELSE 
      dbname.tbl_token t2 
      WHERE t1.hospital_id=t2.hospital_id AND t1.doctor_id=t2.doctor_id); 

내가 쿼리가 작동하지 알고 있지만 어떻게 작동 쿼리를 만들 수 있습니까?

+1

http://meta.stackoverflow.com/questions/285551/왜 내가 코드를 업로드하지 않는 이유는 무엇입니까? 285557 # 285557 –

+0

데이터베이스를 표준화하면 훨씬 쉽게 작업 할 수 있다고 생각합니다. 그. – rbr94

+0

질문을하기 위해 샘플 데이터를주었습니다. 실제 데이터와 다릅니다. – next2u

답변

0

당신은 LEFT 조인 두 가지를 사용하여 두 테이블에 가입해야하고 일치하는 데이터를 찾을 수 COALESCE : 당신의 SELECTLEFT JOIN 두 테이블

SELECT t1.*, 
    colaesce(t_time.hospid, t_token.hospid), 
    colaesce(t_time.start, t_token.start) 
FROM dbname.tbl_doctors_details t1 
LEFT JOIN dbname.tbl_time t_time 
    ON t1.doctor_id=t_time.doctor_id 
AND t1.t_type= 'time' 
LEFT JOIN dbname.tbl_token t_token 
    ON t1.doctor_id=t_token.doctor_id 
AND t1.t_type= 'token'; 
0

사용 CASE WHEN. LEFT JOIN 모두 t_type의 조건을 사용하여 테이블을 조인하십시오. SELECT에서 이제 테이블 t1 또는 t2이 합류되었는지 여부를 확인하고 원하는 열을 선택할 수 있습니다. 다음은 샘플이 (선택한 열을 설명하기 위해 단지 샘플입니다)입니다 :

SELECT CASE WHEN t1.id IS NULL THEN t2.id ELSE t1.id END AS joined_id 
FROM tbl_doctors_details as tbl_base 
LEFT JOIN tbl_time t1 ON t1.t_type = 'time' AND t1.doc_id = tbl_base.doc_id 
LEFT JOIN tbl_token t2 ON t2.t_type = 'token' AND t2.doc_id = tbl_base.doc_id 
0
여기에 사람을 위해 숙제의

심각한 냄새가 .. 시큰둥

SELECT 

    doctors.* 
    , CASE 
    WHEN doctors.type = 'time' THEN time.start 
    ELSE token.start 
    END AS start 

FROM 

doctors 

    LEFT OUTER JOIN time 
    ON time.doc_id = doctors.doc_id 
    AND time.hospital_id = doctors.hospital_id 
    AND doctors.t_type = 'time' 

    LEFT OUTER JOIN token 
    ON token.doc_id = doctors.doc_id 
    AND token.hospital_id = doctors.hospital_id 
    AND doctors.t_type = 'token'