繁体   English   中英

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

[英]Join 2 tables based on column name present in a table row

我有一个名为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列作为Target中ProductLevel的值表。

是的,像这样:

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来提高性能,但是您可能会遇到未使用索引的问题,从而降低了性能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM