Sql 左联接ORA-00918:列定义不明确错误

Sql 左联接ORA-00918:列定义不明确错误,sql,oracle,join,Sql,Oracle,Join,更新:我将左连接切换为完全连接,它可以工作。 然而,我对SQL编码太陌生了,不知道为什么……所以如果有人知道,请告诉我。谢谢大家! 我使用的是Oracle SQL Developer版本4.0.2.15 我不知道我做错了什么,但我不能让这个左连接工作。如果我使用Join,它就会工作。如果我放置左连接,则会收到以下错误消息: ORA-00918:定义不明确的列 91800000-定义不明确的列 *原因: *行动: 错误发生在第一个左连接附近 Select fa.ABC From

更新:我将左连接切换为完全连接,它可以工作。 然而,我对SQL编码太陌生了,不知道为什么……所以如果有人知道,请告诉我。谢谢大家!

我使用的是Oracle SQL Developer版本4.0.2.15 我不知道我做错了什么,但我不能让这个左连接工作。如果我使用Join,它就会工作。如果我放置左连接,则会收到以下错误消息:

ORA-00918:定义不明确的列 91800000-定义不明确的列 *原因: *行动:

错误发生在第一个左连接附近

    Select fa.ABC 

    From AdminDisplay.AppointmentInfo fa  

    Left Join (  
    select info.feFpk as infoFpk  
    ,listagg(info.institution,'/ ') within group (order by rowid) as institution  
    ,listagg(info.fieldofstudy,'/ ') within group (order by rowid) as Undegradmajor  
    ,listagg(info.degreedesc,'/ ') within group (order by rowid) as Undergraddegree  

    from (select fe.ABC feFpk  
    ,fe.institution  
    ,fe.fieldofstudy  
    ,ld.degreedesc  
    from MasterDisplay.faceducation fe  
    join MasterDisplay.lkupdegree ld on ld.degreepk=fe.degreepk  
    where fe.educationtypepk in ('XXX')) info  

    group by info.feFpk  
    ) UG on UG.infoFpk=fa.ABC  
    ;  

不太清楚为什么从内部联接切换到外部联接会引发错误,因为它来自UG内嵌视图。看起来可能是语法错误

您可以通过指定info in-line视图中的两个表中的哪一个提供rowid来避免外部联接错误,正如@Amir sort建议的那样:

Left Join (  
select info.feFpk as infoFpk  
,listagg(info.institution,'/ ') within group (order by fe_rowid) as institution  
,listagg(info.fieldofstudy,'/ ') within group (order by fe_rowid) as Undegradmajor  
,listagg(info.degreedesc,'/ ') within group (order by fe_rowid) as Undergraddegree  

from (select fe.rowid fe_rowid
,fe.ABC feFpk  
,fe.institution  
,fe.fieldofstudy  
,ld.degreedesc  
from MasterDisplay.faceducation fe  
join MasterDisplay.lkupdegree ld on ld.degreepk=fe.degreepk  
where fe.educationtypepk in ('XXX')) info  

group by info.feFpk  
) UG
因此,在内嵌视图中,我在选择列表中添加了fe.rowid fe_rowid作为额外项;然后listagg调用使用别名fe_rowid而不是不明确的rowid


使用rowid排序任何内容都有点奇怪,因为它实际上并不表示数据的任何有用信息。如果你只是选择了它,因为你必须按某物排序,那么你可以按null排序,这也是不确定的;或者按feFpk排序,这可能会稍微有用一些,即使它是一个合成键。

我猜一下,并说您需要在这个属性中更具体一些:按rowid排序按Rowide有一件事对您和回答此问题的任何人都非常有帮助,那就是通过删除所有不相关的内容来减少您发布的SQL对再现错误至关重要。例如,复制错误是否需要注释掉的行?移除一个左连接怎么样?还是一些专栏?显示错误的最小值是多少?对不起…错误发生在第一个左连接中。如果我改为使用Join,整个查询都会工作…这不是我想要的结果。我编辑了问题。感谢这是完全不相关的,但是如果您使用with而不是内联子查询,它确实会增加查询的可读性。我确实觉得很奇怪,将内部连接更改为左连接会导致此编译错误。这不算数,它有用!谢谢你的详细解释。我还试着通过fefPK订购: