2016-09-26 5 views
0

私は3つのテーブルtbl_doctors_details,tbl_timeおよびtbl_tokenを持っています。postgresqlでCASE、WHEN、THENを使用したクエリが動作しない

詳細をtbl_timeまたはtbl_tokenから選択する必要があります。つまり、病院内の特定の医師がt_typetimeの場合、tbl_timeから選択してください。tbl_tokenから選択してください。

たとえば、doctor_idが100およびhospital_id1の場合、t_typetimeです。したがって、このユーザーの場合、詳細はtbl_timeテーブルから選択する必要があります。以下は

3つのテーブルのサンプル構造とデータである:

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 JOINのは2を使用して、両方のテーブルを結合する必要があり、その後、一致するデータを見つけるために、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 WHENLEFT 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

ここで誰かのために宿題をやっての深刻な香り... MEH

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' 
関連する問題