我有一个包含5个ID列的select语句。我需要从存储ID /名称的Customer主表中查找并选择相应的客户名称,然后提供客户报告。表格列如下: origCustomerID,Tier1PartnerID,Tier2PartnerID,DistributorId,EndCustomerID,productId,OrderTotal,OrderDate
前5列是与Customers表中的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
答案 0 :(得分:0)
如果id值始终是客户ID或NULL
(即,如果它们不是NULL
,您确定它们是客户ID而不是其他内容)并且{{1}中的每条记录都是Orders
1}}表最多匹配一个客户(即每个记录在这五列中最多只有一个id;或者可能多次使用相同的id),您可以在匹配表达式中使用COALESCE
。
我目前无法对此进行测试,但是应该使用NULL
表中的第一个非Orders
ID来加入记录。
SELECT [stuff]
FROM Orders O
LEFT OUTER JOIN customers a
ON COALESCE(o.origCustomerID,
o.Tier1PartnerID,
o.Tier2PartnerID,
o.DistributorId,
o.EndCustomerID) = a.custid
希望有所帮助。