sql - 使用 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;
推荐阅读
- mysql - Mysql函数拆分csv?
- javascript - 渲染嵌套组件 ReactJS
- amazon-web-services - 如何在 apache 日志文件中存储服务器 IP
- azure-devops - Azure Dev Ops 默认权限策略
- angular - 我将如何务实地将谷歌分析代码写入 index.html 标头标签?
- python - Django - 静态文件问题
- javascript - 我的脚本仅在选择变体时适用于页面重新加载
- javascript - 触发下一个时在首页滚动
- reactjs - 嵌套链接警告
- amazon-web-services - AWS EIP 未附加但仍计费