1

这是在甲骨文中。我有一个问题,我不确定是否可以真正解决。但是我创建了一个查询,该查询基本上比较了几个不同的字段,并且需要能够利用 2 个子字符串列并将它们相互比较。我不太确定如何执行此操作,因为我尝试了以下代码块,并且不断收到“无效标识符”错误或“单行子查询返回多行”。我知道为什么会出现后者,这不是问题所在。我试图弄清楚为什么我的子字符串列无法相互比较。

代码示例:

这个给了我正确的列,所以我知道它不是语法。

select substr(p.new_plan, 1, 1) as np, substr(p.old_plan, 1, 1) as op 
from sbsb_plan_conv p, cmc_sbel_elig_ent e
where p.sbsb_ck = e.sbsb_ck

这是给我“OP”的完整代码块:无效标识符错误

SELECT p.cspi_id, p.sbel_eff_dt, co.new_plan, co.ch_dt, co.sbsb_ck
FROM sbsb_plan_conv co, cmc_sbel_elig_ent p
WHERE co.ch_dt > p.SBEL_EFF_DT
AND co.new_plan <> p.CSPI_ID
AND co.sbsb_ck = p.sbsb_ck
AND p.cspi_id   = co.OLD_PLAN
and (p.cspd_cat = (
          select substr(o.old_plan, 1, 1) as op  
          from sbsb_plan_conv o, cmc_sbel_elig_ent e
          where op = (
                select substr(q.new_plan, 1, 1) as np   
                from sbsb_plan_conv q, cmc_sbel_elig_ent w
                where q.sbsb_ck = w.sbsb_ck)
          and o.sbsb_ck = e.sbsb_ck)
or p.cspd_cat = (
          select substr(o.new_plan, 1, 1) as np   
          from sbsb_plan_conv o, cmc_sbel_elig_ent e
          where np = (
                select substr(q.old_plan, 1, 1) as op  
                from sbsb_plan_conv q, cmc_sbel_elig_ent w
                where q.sbsb_ck = w.sbsb_ck)
          and o.sbsb_ck = e.sbsb_ck)
            )
AND (p.SBEL_ELIG_TYPE = 'tm'
OR p.sbel_elig_type = 'ce'
OR p.SBEL_ELIG_TYPE = 'TM'
OR p.sbel_elig_type = 'CE')

我最初尝试使用这两个子字符串名称作为条件,但这也不起作用。我在这里做错了什么?

4

1 回答 1

1

您不能使用在同一查询的 where 子句中的 select 子句中定义的别名。

改变这个:

select substr(o.old_plan, 1, 1) as op  
from sbsb_plan_conv o, cmc_sbel_elig_ent e
where op = ...

对此:

select substr(o.old_plan, 1, 1) as op  
from sbsb_plan_conv o, cmc_sbel_elig_ent e
where substr(o.old_plan, 1, 1) = ...

有关的

于 2012-12-21T18:54:52.873 回答