sql - 在 JOIN 的 ON 子句中使用别名

标签 sql join google-bigquery case-sensitive on-clause

Stack Overflow 新手(以及一般编码)。

我做了一些研究,但无法找到以下问题的答案:

如何根据应用于维度的函数结果而不是维度本身连接两个表?

即我想将以下两个表连接到函数 lower() 的小写结果上,而不是按原样连接大小写不明确的维度。

SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
,total_donated
From BensData.Donations As a

JOIN EACH

(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(amount) as total_donated
From BensData.Donations 
GROUP BY email2, first, last) As b

ON a.email1=b.email2 AND a.firstname=b.first AND a.lastname=b.last

它不允许我加入在第一个表 (a) 中创建的别名,但是,如果我加入表 a 中的原始维度(名字和姓氏),那么结果将基于大小写不明确的维度,并给出不想要的结果。

我希望这是清楚的。

感谢您的帮助!

最佳答案

尝试使用两个子查询,如下所示:

SELECT
a.firstname
,a.lastname
,a.email1
,a.total_donated
FROM

(SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
,total_donated
From BensData.Donations) As a

JOIN EACH

(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(amount) as total_donated
From BensData.Donations 
GROUP BY email2, first, last) As b

ON a.email1=b.email2 AND a.firstname=b.first AND a.lastname=b.last

在您的原始查询中,a 只是 BensData.Donations 的别名,因此您只能联接该表中存在的字段。

关于sql - 在 JOIN 的 ON 子句中使用别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538460/

相关文章:

mysql - 连接同一个表上的 2 个查询并向结果添加列

mysql - 将内部连接转换为左侧连接

mysql - 使用条件将 mysql 表连接到自身

mysql - AWS MySQL 到 GCP BigQuery 数据迁移

REST Api 调用 Google 大查询

google-cloud-platform - GCP BigQuery 资源级成本汇总

mysql - Distinct(count(ColumnName)) 上是否需要索引,而 where 子句上有索引?

sql - 创建基于云的 SQL 数据库的最简单/最便宜的方法是什么?

mysql - 获取每组记录的行号

mysql - 使用MySQL,如何根据半相关记录计算 View 字段?