如何匹配 SQL 服务器中的变量数据
How to match variable data in SQL Server
我需要映射两个平面 table 之间的多对多关系。 Table A 包含可能配置的列表(其中每一列都是一个问题,单元格值是答案)。 NULL 值表示答案无关紧要。 Table B 包含具有相同列的实际配置。
最终,我需要最终结果来显示 table B 和 A 之间映射了哪些配置:
Example
ActualId | ConfigId
---------+---------
5 | 1
6 | 1
8 | 2
. | .
. | .
. | .
N | M
举一个我正在处理的 table 和数据的简单示例,第一个 table 看起来像这样:
Table A
--------
ConfigId | Size | Color | Cylinders | ... | ColumnN
---------+------+-------+-----------+-----+--------
1 | 3 | | 4 | ... | 5
2 | 4 | 5 | 5 | ... | 5
3 | | 5 | | ... | 5
而 Table B 看起来像这样:
Table B
-------
ActualId | Size | Color | Cylinders | ... | ColumnN
---------+------+-------+-----------+-----+--------
1 | 3 | 1 | 4 | ... | 5
2 | 3 | 8 | 4 | ... | 5
3 | 4 | 5 | 5 | ... | 5
4 | 7 | 5 | 6 | ... | 5
由于 NULL 值表示任何值都可以工作,因此预期结果将是:
Expected
---------
ActualId | ConfigId
---------+---------
1 | 1
2 | 1
3 | 2
3 | 3
4 | 3
我正在尝试找出匹配超过一百列的实际数据的最佳方法。我知道尝试检查每一列的 NULL 值是绝对错误的并且不会执行良好。我真的很着迷这个问题,希望能得到一些帮助来找到解决这个问题的最佳方法。
因此,这加入了 table 尺寸、颜色和柱面。
尺寸匹配将是 A 对 B:
如果 A.SIZE 为空,则比较将 B.SIZE=B.SIZE 始终 return 为真。
如果 A.SIZE 不为空,则比较将是 A.SIZE=B.SIZE,只有当它们匹配时才为真。
颜色和圆柱体的搭配类似
SELECT * FROM TABLEA A
INNER JOIN TABLEB B ON ISNULL(A.SIZE, B.SIZE)=B.SIZE
AND ISNULL(A.COLOR, B.COLOR)=B.COLOR
AND ISNULL(A.CYLINDERS, B.CYLINDERS)=B.CYLINDERS
我需要映射两个平面 table 之间的多对多关系。 Table A 包含可能配置的列表(其中每一列都是一个问题,单元格值是答案)。 NULL 值表示答案无关紧要。 Table B 包含具有相同列的实际配置。
最终,我需要最终结果来显示 table B 和 A 之间映射了哪些配置:
Example
ActualId | ConfigId
---------+---------
5 | 1
6 | 1
8 | 2
. | .
. | .
. | .
N | M
举一个我正在处理的 table 和数据的简单示例,第一个 table 看起来像这样:
Table A
--------
ConfigId | Size | Color | Cylinders | ... | ColumnN
---------+------+-------+-----------+-----+--------
1 | 3 | | 4 | ... | 5
2 | 4 | 5 | 5 | ... | 5
3 | | 5 | | ... | 5
而 Table B 看起来像这样:
Table B
-------
ActualId | Size | Color | Cylinders | ... | ColumnN
---------+------+-------+-----------+-----+--------
1 | 3 | 1 | 4 | ... | 5
2 | 3 | 8 | 4 | ... | 5
3 | 4 | 5 | 5 | ... | 5
4 | 7 | 5 | 6 | ... | 5
由于 NULL 值表示任何值都可以工作,因此预期结果将是:
Expected
---------
ActualId | ConfigId
---------+---------
1 | 1
2 | 1
3 | 2
3 | 3
4 | 3
我正在尝试找出匹配超过一百列的实际数据的最佳方法。我知道尝试检查每一列的 NULL 值是绝对错误的并且不会执行良好。我真的很着迷这个问题,希望能得到一些帮助来找到解决这个问题的最佳方法。
因此,这加入了 table 尺寸、颜色和柱面。
尺寸匹配将是 A 对 B: 如果 A.SIZE 为空,则比较将 B.SIZE=B.SIZE 始终 return 为真。 如果 A.SIZE 不为空,则比较将是 A.SIZE=B.SIZE,只有当它们匹配时才为真。
颜色和圆柱体的搭配类似
SELECT * FROM TABLEA A
INNER JOIN TABLEB B ON ISNULL(A.SIZE, B.SIZE)=B.SIZE
AND ISNULL(A.COLOR, B.COLOR)=B.COLOR
AND ISNULL(A.CYLINDERS, B.CYLINDERS)=B.CYLINDERS