我需要在两个平面表格之间映射多对多关系。表A包含可能的配置列表(其中每一列是一个问题,单元格值是答案)。空值表示答案无关紧要。表B包含具有相同列的实际配置。
最后,我需要最终结果来显示表B和A之间映射了哪些配置:
Example
ActualId | ConfigId
---------+---------
5 | 1
6 | 1
8 | 2
. | .
. | .
. | .
N | M 为了给出一个我正在处理的表和数据的简单示例,第一个表应该是这样的:
Table A
--------
ConfigId | Size | Color | Cylinders | ... | ColumnN
---------+------+-------+-----------+-----+--------
1 | 3 | | 4 | ... | 5
2 | 4 | 5 | 5 | ... | 5
3 | | 5 | | ... | 5表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由于空值表示任何值都可以工作,因此预期的结果将是:
Expected
---------
ActualId | ConfigId
---------+---------
1 | 1
2 | 1
3 | 2
3 | 3
4 | 3我正在尝试找出匹配实际数据的最佳方法,这些数据有超过100列。我知道尝试检查每一列的空值是绝对错误的,也不会很好地执行。我真的对这个问题很着迷,希望能找到解决这个问题的最佳方法。
发布于 2018-01-17 07:54:31
因此,这与表a的大小、颜色和柱面有关。
大小匹配将是A与B:如果A.SIZE为null,则比较将为B.SIZE=B.SIZE,这将始终返回true。如果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.CYLINDERShttps://stackoverflow.com/questions/48291607
复制相似问题