如果我在MSSQL中有一个包含主数据的表,我必须映射到位于扁平树表的叶子上的对象,如下所示:
[DBO]。[flat_tree]
grand_grand_grand_parent | grand_grand_parent | parent | leaf
15 | 11 | 5 | 1
15 | 11 | 5 | 2
15 | 11 | 5 | 3
15 | 11 | 5 | 4
我将父级别对象与内部联接一起使用,以将它们与主数据中的特定行匹配。这是通过将flat_tree表的每个级别与其他表中的某些属性进行匹配来完成的。
因此,如果主数据是这样的:
[DBO]。[master_data]
id | a1 | a2 | a3
8 | 1 | 5 | 4
6 | 7 | 15 | 20
我会从父节点进行内连接,也会对数据库中的其他表进行叶级对象,并分别将值与a1,a2和a3进行匹配,以找出叶子主数据中的匹配项。然后我将继续将leaf和id插入到具有多对多关系的匹配表中:
[DBO] [映射]
leaf | id
1 | 8
2 | 8
1 | 6
目前我只是使用一堆INNER JOINS来匹配[dbo]。[flat_tree]中对象的属性与[dbo]。[master_data]中的列。有些属性还有字符串值,必须进行评估(通过逐行遍历主数据获取),如下所示:
SELECT flat_tree.leaf
FROM [dbo].[flat_tree]
INNER JOIN [dbo].[properties1]
ON properties1.id = grand_grand_grand_parent
AND properties1.type = 6
AND properties1.stuff = 'temp'
...
我的问题是将主数据映射到叶子上的最具成本效益的方法是什么?