Oracle SQL左外部连接

问题描述:

我正在尝试两个查询并加入查询2(q2)的查询1(q1),这两个表上的usid匹配。 我收到以下错误:Oracle SQL左外部连接

ORA-00904: "Q2"."ENODEB_ID": invalid identifier.

SELECT 
    q1.Date_Range, q1.usid, q2.enodeb_id 
FROM 
(SELECT to_char(to_date(PERIODSTART,'DD/MM/YYYY'), 'MM-DD') || '-' || to_char(to_date(PERIODEND,'DD/MM/YYYY'), 'MM-DD') as Date_Range, 
     usid FROM CQI_DASH.REGIONAL_LCQI_TOPOFFEND) q1 
LEFT JOIN 
(select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID) 
FROM (
select usid, 
     ENODEB_ID, 
     row_number() over (partition by usid, ENODEB_ID order by usid) as rn 
from AXIOM.NRS_LTE_ALU_CELLS 
order by usid, ENODEB_ID) 
WHERE rn = 1 
GROUP BY usid) q2 
ON q1.usid = q2.usid; 
+0

发布DDL和样本数据,以便人们可以提供帮助。 – Sid

+0

Oracle区分大小写。这可能与该弦在某处有很大的关系,而在其他地方则较低。 – durbnpoisn

在您的外部查询中,您选择q2.enodeb_id

但是,在q2的定义中,您只能选择一个LISTAGG,并且不会给它一个别名。你的意思是叫它enodeb_id

+0

是的,我做到了。我错过了别名。 –

LISTAGG(ENODEB_ID...需要一个列名别名。这就是你想称为ENODEB_ID

如果是,请尝试以下操作。此外,如果你正确地格式化你的SQL,它更容易阅读和调试:)

SELECT 
    q1.Date_Range, q1.usid, q2.enodeb_id 
FROM ( 
    SELECT to_char(to_date(PERIODSTART,'DD/MM/YYYY'), 'MM-DD') || '-' || to_char(to_date(PERIODEND,'DD/MM/YYYY'), 'MM-DD') as Date_Range, 
     usid 
    FROM CQI_DASH.REGIONAL_LCQI_TOPOFFEND) q1 
    LEFT JOIN ( 
     SELECT usid, 
     LISTAGG(ENODEB_ID, ',') 
     WITHIN GROUP (ORDER BY ENODEB_ID) AS ENODEB_ID 
     FROM (
     SELECT usid, 
      ENODEB_ID, 
      row_number() over (partition by usid, ENODEB_ID order by usid) as rn 
     FROM AXIOM.NRS_LTE_ALU_CELLS 
     ORDER BY usid, ENODEB_ID 
     ) 
WHERE rn = 1 
GROUP BY usid) q2 
ON q1.usid = q2.usid; 

q2select编列在这里:

​​

你没有一列有一个名为ENODEB_ID,从而出错。也许你的意思是别名listagg

select usid, LISTAGG(ENODEB_ID, ',') WITHIN GROUP (ORDER BY ENODEB_ID) as ENODEB_ID