[英]Using Aliases in the ON Clause of a JOIN
堆棧溢出的新功能(通常是編碼)。
我做了一些研究,但是找不到以下問題的答案:
如何在應用於維的函數結果上而不是維本身上聯接兩個表?
即我想在函數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中的原始維度(first_name和last_name),則結果基於大小寫不明確的維度,並給出不良結果。
我希望這很清楚。
謝謝你的幫助!
嘗試使用兩個子查詢,如下所示:
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的別名,因此您只能聯接該表中存在的字段。
我從未聽說過join each
,也沒有將其記錄為MySQL連接的語法(請參見此處)。
試試這個from
子句:
From BensData.Donations a JOIN
(Select lower(first_name) as first, lower(last_name) as last,
sum(amount) as total_donated
From BensData.Donations
GROUP BY first, last
) b
ON a.firstname = b.first AND a.lastname = b.last
您的版本在列之間的子查詢中也缺少逗號。
為了清楚起見,您可能應該將from
子句寫為:
ON lower(a.firstname) = b.first AND lower(a.lastname) = b.last
或從子查詢中刪除lower()
。 否則,您將依賴於服務器,數據庫和表的默認歸類來確定on
子句的實際作用。
感謝大家的幫助!
特別扣人心弦的人向我指出了正確的方向! 他的代碼和我的代碼的主要區別在於,我的代碼沒有在第一個SELECT子句的每個維的前面附加表別名(例如** a。** fistname,** a。** lastname,- ->名字,姓氏)
由於某種原因,BigQuery一直由於表別名而給我一個錯誤。
這是起作用的代碼。
SELECT
firstname
,lastname
,email1
,total_donated
FROM
(SELECT
lower(first_name) as firstname
,lower(last_name) as lastname
,lower(email) as email1
From BensData.Donations) As a
JOIN EACH
(Select
lower(first_name) as first
,lower(last_name) as last
,lower(email) as email2
,sum(float(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
感謝你的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.