Sql 在派生列中使用SUBSTR函数时,获取列不存在错误
我有两个名为“客户”和“合同”的表格 查询:Sql 在派生列中使用SUBSTR函数时,获取列不存在错误,sql,oracle,common-table-expression,vertica,Sql,Oracle,Common Table Expression,Vertica,我有两个名为“客户”和“合同”的表格 查询: Select cu.A||cu.B||Co.C||Co.D as DUMMY, (SUBSTR(DUMMY,25,1) as NEND, SUBSTR(DUMMY,1,19) as MDATE from Customer Cu Left Outer Join Contract Co on Cu.A=Co.D 所以,当我运行这个查询时,我得到了类似“虚拟列不存在”这样的错误 任何人都可以帮助我如
Select
cu.A||cu.B||Co.C||Co.D as DUMMY,
(SUBSTR(DUMMY,25,1) as NEND,
SUBSTR(DUMMY,1,19) as MDATE
from Customer Cu
Left Outer Join Contract Co
on Cu.A=Co.D
所以,当我运行这个查询时,我得到了类似“虚拟列不存在”这样的错误
任何人都可以帮助我如何实现这一点。虚拟是一个别名,因此不能在与您相同的查询中引用它 如果您想像那样使用
伪
别名,那么必须将整个查询作为子查询。然后可以使用substr
函数,如下所示:
select dummy,
substr(dummy,25,1) as nend,
substr(dummy,1,19) as mdate
from (
select
cu.a||cu.b||co.c||co.d as dummy
from customer cu left outer
join contract co on cu.a = co.d
);
DUMMY
是一个别名,因此不能像您所做的那样在同一个查询中引用它
如果您想像那样使用伪
别名,那么必须将整个查询作为子查询。然后可以使用substr
函数,如下所示:
select dummy,
substr(dummy,25,1) as nend,
substr(dummy,1,19) as mdate
from (
select
cu.a||cu.b||co.c||co.d as dummy
from customer cu left outer
join contract co on cu.a = co.d
);
使用子查询或CTE的另一种方法是使用横向联接定义列:
select s.DUMMY,
SUBSTR(s.DUMMY, 25, 1) as NEND,
SUBSTR(s.DUMMY, 1, 19) as MDATE
from Customer Cu left join
Contract Co
on Cu.A = Co.D left join lateral
(select cu.A || cu.B ||C o.C || Co.D as dummy
from dual
) s
使用子查询或CTE的另一种方法是使用横向联接定义列:
select s.DUMMY,
SUBSTR(s.DUMMY, 25, 1) as NEND,
SUBSTR(s.DUMMY, 1, 19) as MDATE
from Customer Cu left join
Contract Co
on Cu.A = Co.D left join lateral
(select cu.A || cu.B ||C o.C || Co.D as dummy
from dual
) s
错误本身非常清楚没有伪列,因此请在SUBSTR中使用相同的列组合来代替伪列。查询中有一个额外的左括号。错误本身非常清楚没有伪列,所以请在SUBSTR中使用相同的列组合来代替伪列。您的查询中有一个额外的圆括号。