【问题标题】:Tables not joinging properly [Error 10004]表未正确连接 [错误 10004]
【发布时间】:2017-03-01 03:02:32
【问题描述】:
Select count(*) cnt
from fin_sap_prd_tbls.cdhdr cdhdr
  Join fin_sap_prd_tbls.cdpos cdpos on (cdhdr.changenr = cdpos.changenr)
  Join fin_sap_prd_tbls.ekko  ekko on (ekko.lifnr = cdpos.objectid)
  Join fin_sap_prd_tbls.ekpo  ekpo on (ekpo.ebeln = ekko.ebeln)
where cdhdr.objectclas = 'KRED'
  and cdhdr.objectid = 'vendornumber'
  and cdpos.fname = 'ZTERM'
  and ekpo.elikz != 'X';


Select count(*) cnt
from fin_sap_prd_tbls.cdhdr xcdhdr
  Join fin_sap_prd_tbls.cdpos xcdpos on (xcdhdr.changenr = xcdpos.changenr)
 /* Join fin_sap_prd_tbls.ekko  xekko on (xekko.lifnr = xcdpos.objectid)*/
 /* Join fin_sap_prd_tbls.ekpo  xekpo on (xekpo.ebeln = xekko.ebeln)*/
  where xcdhdr.objectclas = 'KRED'
  and xcdhdr.objectid = 'vendornumber'
  and xcdpos.fname = 'ZTERM'
  /*and xekpo.elikz != 'X';*/

Select count(*) cnt
from /*fin_sap_prd_tbls.cdhdr xcdhdr
  Join*/ fin_sap_prd_tbls.cdpos xcdpos /*on (xcdhdr.changenr = xcdpos.changenr)*/
  Join fin_sap_prd_tbls.ekko  xekko on (xekko.lifnr = xcdpos.objectid)
 /* Join fin_sap_prd_tbls.ekpo  xekpo on (xekpo.ebeln = xekko.ebeln)*/
  where xcdhdr.objectclas = 'KRED'
  and xcdhdr.objectid = 'vendornumber'
  and xcdpos.fname = 'ZTERM'
  /*and xekpo.elikz != 'X';*/

我使用的数据库是 Hive,运行此代码时出现以下错误。当我单独运行所有连接时,一切正常并返回数据。

作为一个附带问题,我还希望“hdr”表可以有多个结果,我希望它能够产生最新的变化。我已经尝试过 Max() 但它也出错了。

失败:SemanticException [错误 10004]:第 1:10155 行无效的表别名或列引用“cdpos”

【问题讨论】:

  • 为什么你需要所有表名的别名都与你的别名匹配。
  • 因为我不想每次都写出整个位置。对于“fin_sap_prd_tbls”,我有多种选择。我必须对其进行限定。
  • 确切的代码,我复制并粘贴了。我所做的唯一更改是我删除了真正的供应商编号并将其替换为“供应商编号”
  • @bkirby - 你使用的是哪个版本的 hive?
  • 2.3.4.7 是我昨天被告知的。

标签: sql hive


【解决方案1】:

我会删除别名,因为表名已经与别名匹配。具有相同名称的对象可能会混淆引擎。

SELECT count(*) cnt
FROM fin_vsap_prd_tbls.cdhdr 
  JOIN fin_sap_prd_tbls.cdpos on (cdhdr.changenr = cdpos.changenr)
  JOIN fin_sap_prd_tbls.ekko  on (ekko.lifnr = cdpos.objectid)
  JOIN fin_sap_prd_tbls.ekpo  on (ekpo.ebeln = ekko.ebeln)
WHERE cdhdr.objectclas = 'KRED'
  and cdhdr.objectid = 'vendornumber'
  and cdpos.fname = 'ZTERM'
  and ekpo.elikz != 'X';

或以不同的方式命名它们...

SELECT count(*) cnt
FROM fin_vsap_prd_tbls.cdhdr  xcdhdr
  JOIN fin_sap_prd_tbls.cdpos xcdpos on (xcdhdr.changenr = xcdpos.changenr)
  JOIN fin_sap_prd_tbls.ekko  xekko on (xekko.lifnr = xcdpos.objectid)
  JOIN fin_sap_prd_tbls.ekpo  xekpo on (xekpo.ebeln = xekko.ebeln)
WHERE xcdhdr.objectclas = 'KRED'
  and xcdhdr.objectid = 'vendornumber'
  and xcdpos.fname = 'ZTERM'
  and xekpo.elikz != 'X';

【讨论】:

  • 编译语句时出错:FAILED: ParseException line 1:0 cannot identify input near 'and' 'cdhdr' '.':28:27, 该表不合格。
  • 尝试使用未使用名称的别名(我只是以 x 为前缀)。如果我们仍然有问题,那么我想确认 objectclasobjectidfin_vsap_prd_tbls.cdhdr 中的有效字段
  • 编译语句时出错:失败:SemanticException [错误 10004]:第 1:10590 行无效的表别名或列引用“xcdpos”:与以前相同的错误。
  • fin_sap_prd_tbls.cdpos 中是fnameobjectIDchangenr
  • 是的,就像我之前所说的,所有的连接都单独工作并产生结果。 cdhdr>cdpos,cdpos>ekko,ekko>ekpo。当我把它们放在一起时,它就失败了。
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 2019-03-02
  • 2011-10-15
  • 2016-07-17
  • 1970-01-01
  • 2013-08-14
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多