sql - INNER JOIN 的别名引用了字段列表 SQL 中的一列
问题描述
我真的在为此苦苦挣扎。
SELECT t1.servizio,
Count(DISTINCT p.pro_id),
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id
END) AS 'M',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id
END) AS 'F',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN
p.pro_id
END) AS 'prov_si',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN
p.pro_id
END) AS 'prov_no',
Count(DISTINCT t1.pronto_request_id),
Count(t2.quote_id)
FROM pro p,
pro_request pr,
request_servizio t1
JOIN (SELECT request_servizio.servizio,
Count(quote_request.quote_id)
FROM request_servizio,
quote_request
WHERE request_servizio.pronto_request_id =
quote_request.pronto_request_id
GROUP BY request_servizio.servizio) AS t2
ON t1.servizio = t2.servizio
WHERE p.pro_id = pr.pro_id
AND pr.pronto_request_id = t1.pronto_request_id
GROUP BY t1.servizio
基本上,我涉及 4 个表:request_servizio
、pro
和。pro_request
quote_request
问题在于最后选择的列:
错误是“未知列 t2.quote_id ...”
但是yett2
是join的别名。那么为什么我得到这个错误呢?
我试图包含quote_request
可以找到最后一个属性的表,但是我得到了错误的聚合。如何避免这种情况?
先感谢您!
解决方案
在 JOIN 中,您使用的子查询不提供 quote_id 列,这意味着您不能从别名 t2 引用它,因为在选择部分的内部子查询中没有提供它。您只能使用从内部查询中提供的内容。
我会说将查询更改为此,因为您似乎已经有了要使用的计数。
SELECT t1.servizio,
Count(DISTINCT p.pro_id),
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%M' THEN p.pro_id
END) AS 'M',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.gender) LIKE '%F' THEN p.pro_id
END) AS 'F',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%Si' THEN
p.pro_id
END) AS 'prov_si',
Count(DISTINCT CASE
WHEN Concat(p.pro_id, p.in_provincia) LIKE '%No' THEN
p.pro_id
END) AS 'prov_no',
Count(DISTINCT t1.pronto_request_id),
Count(t2.CountOfQuoteId) --edit here
FROM pro p,
pro_request pr,
request_servizio t1
JOIN (SELECT request_servizio.servizio,
Count(quote_request.quote_id) AS CountOfQuoteId --edit here
FROM request_servizio,
quote_request
WHERE request_servizio.pronto_request_id =
quote_request.pronto_request_id
GROUP BY request_servizio.servizio) AS t2
ON t1.servizio = t2.servizio
WHERE p.pro_id = pr.pro_id
AND pr.pronto_request_id = t1.pronto_request_id
GROUP BY t1.servizio
您也可以将这些连接更改为更新的标准,它更清洁且更易于使用。
推荐阅读
- c# - JSON 和 VS C# 对象和名称
- github - Hugo 部署和删除不需要的文件
- java - 我不断收到错误无法解析符号'MutableInteger。在 getvalue() 或 setValue() 上也是如此
- octave - 问题:GNU octave 显示在命令窗口中运行的任何程序的每一行
- python - 我怎样才能得到这段代码的渐近复杂度?
- reactjs - Gatsby 布局组件内的嵌套路由器
- python - 从文本文件中提取数据作为数组
- postgresql - 去扫描 Postgres array_agg
- javascript - React(JS)如何获取导入当前模块的文件的文件名?
- cytoscape - Cytoscape:试图确定两种节点类型中哪一种更“中心”