0

我有一个带有 5 个 ID 列的 select 语句。我需要从存储 ID/名称的客户主表中查找并选择相应的客户名称,并提供客户报告。表格列如下: origCustomerID,Tier1PartnerID,Tier2PartnerID,DistributorId,EndCustomerID,productId,OrderTotal,OrderDate

前 5 列是与客户表中的 CustID 列匹配的 ID 列。请注意,并非所有这些列都始终包含给定记录的值,即它们有时可能为空。鉴于 hiveQL 目前的限制,我只能想到以下方式,但这会占用大量时间,并不是最好的方式。您能否建议对此进行任何改进?

Select origCustomerID,a.name,Tier1PartnerID,b.name,Tier2PartnerID,
c.name,DistributorId,d.name,EndCustomerID,e.name,productId,OrderTotal,OrderDate 
From Orders O
LEFT OUTER JOIN customers a on o.origCustomerID = a.custid
LEFT OUTER JOIN customers b on o.Tier1PartnerID = a.custid
LEFT OUTER JOIN customers c on o.Tier2PartnerID = a.custid
LEFT OUTER JOIN customers d on o.DistributorId = a.custid
LEFT OUTER JOIN customers e on o.EndCustomerID = a.custid
4

1 回答 1

0

如果 id 值始终是客户 id 或NULL(即如果他们不是NULL您确定它们是客户 id 而不是其他东西)并且Orders表中的每条记录最多匹配一个客户(即每条记录最多有一个 id在这五列中;或者可能多次使用相同的 id),您也许可以COALESCE在匹配的表达式中使用。

我目前无法对此进行测试,但这应该使用表中的第一个非NULLid加入记录Orders

SELECT [stuff]
FROM Orders O
LEFT OUTER JOIN customers a
ON COALESCE(o.origCustomerID, 
            o.Tier1PartnerID, 
            o.Tier2PartnerID, 
            o.DistributorId, 
            o.EndCustomerID) = a.custid

希望有帮助。

于 2013-09-17T08:04:49.893 回答