我有一个名为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。
答案 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来提高性能,但是您可能会遇到不使用索引的问题,从而降低性能