我有这个错误“ON子句必须是AND =每个表中一个字段名称的比较,所有字段名称都以表名为前缀。
此左连接仅用于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
答案 0 :(得分: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