如何避免在 CASE WHEN 中关联子查询?

How to avoid correlating subqueries inside CASE WHEN?

假设我们有这四个 table:

create table table_x(x number, title varchar2(100));

create table table_y(y number, x number, title varchar2(100));

create table table_z(z number, y number, x number, title varchar2(100));

create table table_main(z number, y number, x number);

需要根据规则table_main中的每一行获取title:

select 
    case
         when z is not null
         then (select title from table_z where x = tm.x and y = tm.y and z = tm.z)

         when y is not null
         then (select title from table_y where x = tm.x and y = tm.y)

         when x is not null
         then (select title from table_x where x = tm.x)
     end as title
 from table_main tm;

我正在寻找产生等效结果的更具可读性的解决方案。

有没有办法重构查询,用 table 连接或其他方式替换 case when 语句?

我的方法是:

SELECT COALESCE(tz.title, ty.title, tx.title) AS mytitle
  FROM table_main tm
  LEFT OUTER JOIN table_x tx
    ON tx.x_number = tm.x_number
  LEFT OUTER JOIN table_y ty
    ON ty.x_number = tm.x_number
   AND ty.y_number = tm.y_number
  LEFT OUTER JOIN table_z tz
    ON tz.x_number = tm.x_number
   AND tz.y_number = tm.y_number   
   AND tz.z_number = tm.z_number