加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL多重毗连与一再记录或“无效标识符”

发布时间:2021-01-14 11:42:48 所属栏目:站长百科 来源:网络整理
导读:我对SQL很新,之前做过一些毗连但没有像这样伟大. 根基上,我要做的是将很多表毗连在一路以表现陈诉的总体数据.主表g,是我但愿看到的具体水平. g与附加到其上的全部表格具有一对多相关. GROUP BY会消除这些一再吗? 我实行过行使SELECT DISTINCT,但我不确定这

我对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 ID

FROM

schema123.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   hkey
1           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   fkey
5234    MEDICARE        1           6234

F表
主键:fkey
外键:gfield123

fkey    ffield123         gfield123 
6234    ABC123            1

H表
主键:hkey

hkey    hfield123           
7234    9999

预期功效

gfield123   afield123   bfield123 cfield123 efield123 ffield123 hfield123
1           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 hField123
FROM schema123.g12345 g
LEFT JOIN schema123.a12345 a
  ON g.gkey = a.gkey
LEFT JOIN schema123.b12345 b
  ON a.akey = b.akey
 AND g.gkey = b.gkey
LEFT JOIN schema123.c12345 c
  ON b.bkey = c.bkey
 AND g.gkey = c.gkey
LEFT JOIN schema123.d12345 d
  ON c.ckey = d.ckey
 AND g.gkey = d.gkey
LEFT JOIN schema123.e12345 e
  ON d.dkey = e.dkey
 AND g.gkey = g.gkey
LEFT JOIN schema123.f12345 f
  ON e.ekey = f.ekey
 AND g.gkey = g.gkey
LEFT JOIN schema123.f12345 
  on g.hkey = h.hkey
GROUP 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秀.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读