首页 > 解决方案 > 根据表行中存在的列名连接 2 个表

问题描述

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

ProductLevel
ProductName
CustomerLevel
CustomerName
Target

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

ProductId
ProductCategory
ProductBrand

在名为 Customer 的第三个表中,我有 3 列:

CustomerID
CustomerName
SubCustomerName

有没有办法进行动态连接,根据我在第一个表中的值选择我将在 JOIN 中使用的列?

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

PS:我正在寻找一种动态创建它的方法,我可以在不更改代码的情况下向该表添加新列,然后将来我可以在 Product Table 和 Segment 中拥有 ProductSegment 列作为 Target 中 ProductLevel 的值桌子。

标签: sqljoinhive

解决方案


是的,像这样:

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 中的要求进行操作,甚至上面的这种结构也表明您的数据模型已损坏。即使没有 t.ProductLevel = 'Segment' 的行,您现在至少可以为其添加代码

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


推荐阅读