Oracle SQL多重连接与重复记录或“无效标识符”

Oracle SQL多重连接与重复记录或“无效标识符”,第1张

概述我对SQL很新,之前做过一些连接但没有像这样复杂. 基本上,我要做的是将许多表连接在一起以显示报告的总体数据.主表g,是我希望看到的详细程度. g与附加到其上的所有表格具有一对多关系. GROUP BY会消除这些重复吗? 我尝试过使用SELECT DISTINCT,但我不确定这是否是最佳解决方案. 这是我正在运行的SQL的输出ORA-00904:“a”.“akey”:无效的标识符. SELECT 我对sql很新,之前做过一些连接但没有像这样复杂.

基本上,我要做的是将许多表连接在一起以显示报告的总体数据.主表g,是我希望看到的详细程度. g与附加到其上的所有表格具有一对多关系. GROUP BY会消除这些重复吗?

我尝试过使用SELECT disTINCT,但我不确定这是否是最佳解决方案.

这是我正在运行的sql的输出ORA-00904:“a”.“akey”:无效的标识符.

SELECT a.afIEld123 ORDER_QTY,b.bfIEld123 MANUF,c.cfIEld123 ORDER_DATE,d.dfIEld123 PATIENT_CREATE_DATE,e.efIEld123 PAYOR_CLASS,f.ffIEld123 IDFROMschema123.a12345            a,schema123.b12345            b,schema123.c12345            c,schema123.d12345            d,schema123.e12345            e,schema123.f12345            f,left JOIN schema123.g12345  g ON     (a.akey = b.akey AND c.ckey = d.ckey AND  e.ekey = f.ekey)

这是一些示例数据

G表(主表)
主键:gfIEld123
外键:akey,bkey,ckey,dkey,ekey,fkey,hkey

gfIEld123   gfIEld124   akey    bkey    ckey    dkey    ekey    fkey   hkey1           8/1/2017    1234    2234    3234    4234    5234    6234   7234

一张桌子
主键:akey
外键:gfIEld123,bkey

akey    afIEld123   gfIEld123   bkey        1234    20          1           2234        1235    40          1           2234

B表
主键:bkey
外键:gfIEld123,akey

bkey    bfIEld123   gfIEld123 akey  ckey    2234    COMPANY1    1         1234  3234

C表
主键:ckey
外键:gfIEld123,dkey

ckey    cfIEld123   gfIEld123   bkey    dkey    3234    8/5/2017    1           2234    4234

D表
主键:dkey
外键:gfIEld123,ekey

dkey    dfIEld123       gfIEld123   ckey    ekey    4234    7/1/2017        1           3234    5234

E表
主键:ekey
外键:gfIEld123,fkey

ekey    efIEld123       gfIEld123   fkey5234    MEDICARE        1           6234

F表
主键:fkey
外键:gfIEld123

fkey    ffIEld123         gfIEld123 6234    ABC123            1

H表
主键:hkey

hkey    hfIEld123           7234    9999

预期结果

gfIEld123   afIEld123   bfIEld123 cfIEld123 efIEld123 ffIEld123 hfIEld1231           60          COMPANY1  8/5/2017  MEDICARE  ABC123    9999

编辑:sql简化,数据样本,预期结果

解决方法 如果你想要来自G的所有记录,那么只需要在a-b-c-d-e-f中匹配的记录

除非您发生聚合,否则通常不会使用分组. distinct告诉我们您知道表连接中有重复项,并且您希望从结果中删除它们.

SELECT sum(a.afIEld123) as ORDER_QTY,b.bfIEld123 as MANUF,c.cfIEld123 as ORDER_DATE,d.dfIEld123 as PATIENT_CREATE_DATE,e.efIEld123 as PAYOR_CLASS,f.ffIEld123 as ID,g.gfIEld123 as gkey,g.hfIEld123 as hFIEld123FROM schema123.g12345 gleft JOIN schema123.a12345 a  ON g.gkey = a.gkeyleft JOIN schema123.b12345 b  ON a.akey = b.akey AND g.gkey = b.gkeyleft JOIN schema123.c12345 c  ON b.bkey = c.bkey AND g.gkey = c.gkeyleft JOIN schema123.d12345 d  ON c.ckey = d.ckey AND g.gkey = d.gkeyleft JOIN schema123.e12345 e  ON d.dkey = e.dkey AND g.gkey = g.gkeyleft JOIN schema123.f12345 f  ON e.ekey = f.ekey AND g.gkey = g.gkeyleft JOIN schema123.f12345   on g.hkey = h.hkeyGROUP BY,g.hfIEld123 as hFIEld123

注意我们

>取消了from子句中的逗号符号,这是89标准.是的,差不多30年前,92中有一个现在使用左/右,完全外部语法.>将g.fIEld123 gkey添加到select如果没有选择任何内容时加入表的原因?>将g移动到from中的第一个条目(你想要G中的所有记录,只有那些与其他表链匹配的记录对吗?>为每个连接放置一个左连接和一个on子句.>我对齐了代码,以便在select中看到我们是否遗漏了a.>假设关键符号有意义.>假设加入g.gkey = a.akey,因为你没有说明g与其他表格的关系.>如果添加WHERE子句,则只能在那里添加对g的限制.>如果您需要限制其他表中的值,请在连接本身上使用AND,例如和d.dfIEld123> = to_date(‘2017-01-01′,’YYYY-MM-DD’),因此只有患者在2017秀.

总结

以上是内存溢出为你收集整理的Oracle SQL多重连接与重复记录或“无效标识符”全部内容,希望文章能够帮你解决Oracle SQL多重连接与重复记录或“无效标识符”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存