Sql 如何避免在CASE中关联子查询?
假设我们有这四张表:Sql 如何避免在CASE中关联子查询?,sql,case,correlated-subquery,Sql,Case,Correlated Subquery,假设我们有这四张表: create table_x(x编号,title varchar2(100)); 创建表格y(y编号,x编号,标题varchar2(100)); 创建表格z(z编号、y编号、x编号、标题varchar2(100)); 创建表格(z编号、y编号、x编号); 需要根据以下规则为表\u main中的每一行获取标题: select case when z is not null then (select title from tabl
create table_x(x编号,title varchar2(100));
创建表格y(y编号,x编号,标题varchar2(100));
创建表格z(z编号、y编号、x编号、标题varchar2(100));
创建表格(z编号、y编号、x编号);
需要根据以下规则为表\u main
中的每一行获取标题
:
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;
我正在寻找一种更具可读性的解决方案,以产生相同的结果
当语句与表连接或以其他方式连接时,是否有方法重构查询以替换案例?我的方法是:
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
我的做法是:
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
这些是标量子查询。您可以使用三个左连接加上一个合并()来避免它们@joop似乎我们有相同的想法;-)这些是标量子查询。您可以使用三个左连接加上一个合并()来避免它们@joop似乎我们有相同的想法;-)