简体   繁体   English

Oracle SQL左外部联接

[英]Oracle SQL left outer join

I am trying to take two queries and join the reults of query 2 (q2) to query 1 (q1) where usid match on both tables. 我试图进行两个查询,并将查询2(q2)的结果加入查询1(q1),其中两个表上的usid都匹配。 I am getting the following error: 我收到以下错误:

ORA-00904: "Q2"."ENODEB_ID": invalid identifier. ORA-00904:“ Q2”。“ ENODEB_ID”:无效的标识符。

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;

The select ed columns relating to q2 are here: q2相关的select列在此处:

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

You don't have a column there named ENODEB_ID , thus the error. 您那里没有名为ENODEB_ID的列,因此是错误的。 Perhaps you meant to alias the listagg ? 也许您是listagg别名?

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

In your outer query you select q2.enodeb_id . 在外部查询中,选择q2.enodeb_id

However, in the definition of q2 you only select a LISTAGG, and you don't give it an alias. 但是,在q2的定义中,您仅选择一个LISTAGG,并且没有为其赋予别名。 Did you mean to call it enodeb_id ? 您的意思是称它为enodeb_id吗?

The LISTAGG(ENODEB_ID... needs a column name alias. Is that what you want to be called as ENODEB_ID ? LISTAGG(ENODEB_ID...需要一个列名别名。这就是您想称为ENODEB_ID吗?

If yes, try the following. 如果是,请尝试以下操作。 Also if you format your SQL properly, it is easier to read and debug :) 同样,如果您正确设置了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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM