具有JOIN的UNION ALL子查询生成语法错误

问题描述

我正在尝试从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'退出

谢谢!

解决方法

此查询对我有用:

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;