sql - 根据表行中存在的列名连接 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 的值桌子。
解决方案
是的,像这样:
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 来提高性能,但您可能会遇到不使用索引的问题,从而削弱性能
推荐阅读
- javascript - Recharts — 有没有办法在 RadarChart 的图表和标签之间添加填充?
- python - 为什么 np.array([1, "a"]) 使用 21 个字符的 Unicode 字符串?
- java - Python 的 subprocess shell=True 属性的 Java 等价物是什么?
- python - 恢复ckpt后如何量化(tensorflow lite)
- flutter - 如何从rest api中获取材料数据表中的数据
- flutter - 是否有可能在颤动的 onTap GestureDetector 函数中获取额外信息
- javascript - 想要使用 js 允许 Backspace 或 spcae 按钮
- ios - 块操作立即返回 Swift
- python - 我无法在 django 的字典中获得准确的值
- jhipster - 打包为 ERROR jar,方法 pageableParameterBuilderPlugin