2016-05-16 95 views
1

我有這樣的錯誤「ON子句必須與每個表一字段名=比較,與表名前綴的字段名。左在谷歌大查詢加入

這LEFT JOIN僅用於c.Network,其他情況下不需要,我明白錯誤,但兩個表之間沒有共同的字段(bigdata:RawDebug.T和bigdata:RawDebug.CarrierDetails),所以我不能在「ON」語句中引用兩個表。

任何幫助,將不勝感激!!

DEFINE QUERY Test2 
SELECT 
HardwareId, DebugReason, DebugData, 
CASE 
    WHEN lower(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
END 
as ActualDebugData 
FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))) as d 
LEFT JOIN [bigdata:RawDebug.CarrierDetails] as c ON c.Mcc = 289 AND c.Mnc = 88 
    WHERE d.reason = 50013 

回答

1
SELECT 
    HardwareId, DebugReason, DebugData, 
    CASE 
    WHEN LOWER(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
    END AS ActualDebugData 
FROM (
    SELECT * 
    FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) 
) AS d 
CROSS JOIN (
    SELECT Network 
    FROM [bigdata:RawDebug.CarrierDetails] 
    WHERE Mcc = 289 AND Mnc = 88 
    LIMIT 1 
) AS c 
WHERE d.reason = 50013 

或改善(每費利佩建議)性能:

SELECT 
    HardwareId, DebugReason, DebugData, 
    CASE 
    WHEN LOWER(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
    END AS ActualDebugData 
FROM (
    SELECT 
    HardwareId, DebugReason, DebugData 
    FROM TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) 
    WHERE reason = 50013  
) AS d 
CROSS JOIN (
    SELECT Network 
    FROM [bigdata:RawDebug.CarrierDetails] 
    WHERE Mcc = 289 AND Mnc = 88 
    LIMIT 1 
) AS c 
+0

纔有可能移動「WHERE d.reason = 50013」的子選擇(的方式更好的性能可能) –

+1

完全同意 - 對子級將其移動到d子選擇 –

+0

我得到這個錯誤「字段d.reason」沒有找到任何一方的JOIN「 – user3447653