根据表行中存在的列名联接2个表

时间:2018-12-29 14:31:47

标签: sql join hive

我有一个名为Target的表,其中有5列:

ProductLevel
ProductName
CustomerLevel
CustomerName
Target

在另一个名为Products的表中,我有3列:

ProductId
ProductCategory
ProductBrand

在名为客户的第三张表中,我有3列:

CustomerID
CustomerName
SubCustomerName

是否有一种方法可以进行动态联接,因此我可以根据第一张表中的值选择要在JOIN中使用的列?

示例:如果在第一个表中我在ProductLevel中具有Category,那么我将使用ProductCategory字段加入表产品。如果我拥有品牌,我将使用ProductBrand加入... Customer表也是如此。

PS:我正在寻找一种动态创建方式,可以在不更改代码的情况下向表中添加新列,然后在将来我可以在Product Table和Segment中将ProductSegment列作为其中的值目标表中的ProductLevel。

1 个答案:

答案 0 :(得分:0)

是的,像这样:

SELECT * FROM
  Target t
  INNER JOIN
  Product p
  ON
    (t.ProductLevel = 'Category' AND t.??? = p.ProductCategory)
    OR
    (t.ProductLevel = 'Brand' AND t.??? = p.ProductBrand)

您没有说Target的哪一栏包含您的产品类别/品牌,因此?在上面的查询中。替换???明智的选择

PS;您无法按照PS中的要求进行操作,甚至上面的这种结构也表明您的数据模型已损坏。即使没有t.ProductLevel ='Segment'

的行,您也至少可以立即为其添加代码。

不要指望它能很好地执行或扩展。您可能可以通过将它作为一组UNION查询而不是OR来提高性能,但是您可能会遇到不使用索引的问题,从而降低性能