[英]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.