【发布时间】:2018-03-28 17:21:52
【问题描述】:
当我运行以下 HiveQL 代码时出现错误: 执行错误:编译语句时出错:失败:SemanticException [错误 10004]:第 1 行:2112 无效的表别名或 列引用“T3”
SELECT *
FROM CC_CLAIM_EXT T1
INNER JOIN CC_EXPOSURE_EXT T2 ON (T1.ID = T2.CLAIMID)
LEFT OUTER JOIN CC_POLICY_EXT T3 ON (T1.POLICYID = T3.ID)
LEFT OUTER JOIN CC_COVERAGE_EXT T4 ON (T2.COVERAGEID = T4.ID)
LEFT OUTER JOIN CC_TRANSACTION_EXT T5 ON (T2.ID = T5.EXPOSUREID)
LEFT OUTER JOIN CC_TRANSACTIONSET_EXT T6 ON (T5.TRANSACTIONSETID = T6.ID)
LEFT OUTER JOIN CC_TRANSACTIONLINEITEM_EXT T7 ON (T5.ID = T7.TRANSACTIONID)
LEFT OUTER JOIN CC_RISKUNIT_EXT T12 ON (T4.RISKUNITID = T12.ID)
LEFT OUTER JOIN CC_CLASSCODE_EXT T13 ON (T12.CLASSCODEID = T13.ID)
LEFT OUTER JOIN (SELECT TT12.CLAIMID
,CASE WHEN COUNT(TT13.PRIMARYBODYPART) > 1 THEN 10010 ELSE MAX(TT13.PRIMARYBODYPART) END AS PRIMARYBODYPART
,CASE WHEN COUNT(TT13.DETAILEDBODYPART) > 1 THEN 10010 ELSE MAX(TT13.DETAILEDBODYPART) END AS DETAILEDBODYPART
FROM CC_INCIDENT_EXT TT12
LEFT OUTER JOIN CC_BODYPART_EXT TT13 ON (TT12.ID = TT13.INCIDENTID)
GROUP BY TT12.CLAIMID) T14
ON (T1.ID = T14.CLAIMID AND T3.POLICYTYPE IN(10022,10023))
WHERE T1.STATE IN(2,3)
AND T2.STATE IN(2,3)
AND T6.APPROVALSTATUS = 1
AND T7.RETIRED = 0
ORDER BY CLAIMNUMBER
,EXPOSUREID
,TRANSACTIONID
我已经把范围缩小到了:
ON (T1.ID = T14.CLAIMID AND T3.POLICYTYPE IN(10022,10023))
如果我删除:
AND T3.POLICYTYPE IN(10022,10023)
代码运行良好。有没有更好的方法来限制 HiveQL 中的这种联接?
【问题讨论】: