【问题标题】:Query using CASE, WHEN, THEN in postgresql not working在 postgresql 中使用 CASE、WHEN、THEN 查询不起作用
【发布时间】:2016-09-26 05:54:15
【问题描述】:

我有三个表,tbl_doctors_detailstbl_timetbl_token

我必须从tbl_timetbl_token 中选择详细信息。也就是说,如果医院里的特定医生有t_typetime 然后从tbl_time 中选择,否则从tbl_token 中选择。

例如,doctor_id 是 100,hospital_id 是 1,t_typetime。所以对于这个用户,详细信息应该从tbl_time表中选择。

下面是三个表的示例结构和数据:

这里如何在查询中使用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);

我知道查询不起作用,但我怎样才能使查询起作用?

【问题讨论】:

标签: sql postgresql case


【解决方案1】:

您需要使用两个 LEFT JOIN 连接两个表,然后使用 COALESCE 来查找匹配的数据:

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';

【讨论】:

    【解决方案2】:

    在您的SELECTLEFT JOIN 两个表中使用CASE WHEN。在LEFT JOIN 中,都使用t_type 的条件加入表格。在您的SELECT 中,您现在可以检查表t1t2 是否已加入并选择首选列。这是一个示例(所选列只是一个示例):

    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
    

    【讨论】:

      【解决方案3】:

      在这里为某人做作业的味道很重..嗯

      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'
      

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 2020-09-12
        • 1970-01-01
        • 2014-11-29
        相关资源
        最近更新 更多