【问题标题】:UNION ALL subquery with JOIN generating syntax error使用 JOIN 生成语法错误的 UNION ALL 子查询
【发布时间】:2020-09-07 17:44:04
【问题描述】:

我正在尝试从 3 个表中获取数据,然后加入该结果集,如下所示:

SELECT     r.region, 
           r.recordtype,
           i.entity,
           COUNT(i.requestid) AS responses 
FROM       ( 
                  SELECT region, 
                         recordtype,
                         entity, 
                         requestid 
                  FROM   ( 
                                SELECT region, 
                                       'a' AS recordtype,
                                       requestid 
                                FROM   db.table1 
                                UNION ALL 
                                SELECT region, 
                                       'b' AS recordtype,
                                       requestid 
                                FROM   db.table2
                                UNION ALL 
                                SELECT region, 
                                       'c' AS recordtype,
                                       requestid 
                                FROM   db.table3 
                         ) union_results
           ) r 
RIGHT JOIN db.responses i 
ON         r.requestid = i.requestid 
GROUP BY   r.recordtype, 
           r.region,
           i.entity

我最终要寻找的是 i.requestid 在其他三个表的联合结果中的行的结果,然后按所示分组,虽然我什至不确定我是否正确使用 RIGHT JOIN我在基本查询中遇到错误。

请求表 1 (a)

requestid  region
abcdef  us
bcdefg  eu
cdefgh  eu

请求表 2 (b)

requestid  region
fghijk  eu
rstuwx  eu
jklmno  eu

请求表 3 (c)

requestid  region
klmnop  eu
ghijkl  eu
opqrst  eu

回复

requestid  entity
abcdef  1
rstuwx  3
ghijkl  5
opqrst  5

结果

region  entity  recordtype  count(responses)
us  1  a  1
eu  3  b  1
eu  5  c  2

我成功地将联合作为子查询单独使用,但是当与连接配对时,我收到以下错误,所以我正在寻找关于我做错了什么的指针,我现在已经失明了。我使用中间表,因为最终计划是根据扩展数据在此处创建一些动态列(示例仅代表查询工作后我将最终提取的一些列)。

失败:ParseException 第 4:6 行无法识别 '(' 附近的输入 joinSource 命令中的 'SELECT' 'region' 以 ret '64' 退出

谢谢!

【问题讨论】:

  • 为什么会有3个这么相似的表?
  • 如果您从查询中删除db.responses (i) 以及对它的所有引用,它会起作用吗?
  • 我会尝试GROUP BY r.region, r.recordtype,等其他问题得到纠正。
  • 为 UNION ALL 部分创建一个视图。加入它并分组。
  • 我用 UNION 做了一个快速测试,加入了分组响应,没有错误。编辑问题以将示例数据和所需结果显示为文本表。

标签: sql hive hiveql


【解决方案1】:

这个查询对我有用:

SELECT r.region, r.recordtype, entity, Count(responses.requestid) AS responses FROM
(SELECT region, "a" AS recordtype, requestid FROM Table1
 UNION ALL SELECT region, "b", requestid FROM Table2
 UNION ALL SELECT region, "c", requestid FROM Table3) AS r
RIGHT JOIN responses ON r.requestid=responses.requestid
GROUP BY recordtype, region, entity;

【讨论】:

  • 谢谢 - 使用相同的查询我仍然得到相同的错误,所以它似乎与中间查询无关:cannot recognize input near '(' 'SELECT' 'region' in joinSource。我被难住了。
  • 好的,我应该提到我正在使用 Access,所以一定是关于 HiveQL 的。尝试将所有对象名称括起来:[region].
  • 同样的问题,抱歉。我确实在外部选择了 * 并且也删除了该组。我一直在阅读有关 HiveQL 如何不支持共同相关子查询的信息,但我认为这里不是这种情况。
  • 我无法复制问题,因此无法提供解决方案。
猜你喜欢
  • 2019-11-24
  • 1970-01-01
  • 2018-01-07
  • 2018-07-27
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
相关资源
最近更新 更多