首页 > 解决方案 > 一个表中所有可能的列与其他表的条件数据的组合

问题描述

LinkedColorSize我希望结果是SQL Server 中表的颜色和大小两列的组合。我有三张桌子ColorSizeLinkedColorSize

我有一张桌子Color

颜色名称
红色的
绿色的

第二张表是Size

尺寸名称
小的
大的

第三张桌子LinkedColorSize

链接ID 颜色 尺寸
1 红色的 大的
2 绿色的 0

在这个例子中,我找不到任何解决方案。表中 0 代表全部,这意味着如果 Color 列中的 0 表示 Color 表中的所有颜色,Size 列中的 0 表示 Size 表中的所有尺寸,因此 Small 和 Large 都应该映射为绿色的。

第二个表的预期结果类似于。

颜色 尺寸
红色的 大的
绿色的 小的
绿色的 大的

LinkedColorSize表也可以是:

链接ID 颜色 尺寸
1 红色的 大的
2 0 0

或者

链接ID 颜色 尺寸
1 0 0
2 0 0

或者

链接ID 颜色 尺寸
1 0 小的
2 0 0

或者别的什么......

我会感谢你的帮助。

标签: sql-server

解决方案


您可以使用INNER JOIN. on LinkedColorSize.Color = Color.Color. 对于Color = '0' CROSS JOIN`Color = 0的情况LinkedColorSize, The join condition will effectively making it


select l.*, c.Color, s.Size
from   LinkedColorSize l
       inner join Color c  on l.Color = c.Color or l.Color = '0'
       inner join Size s   on l.Size  = s.Size  or l.Size  = '0'
order by l.LinkID, c.Color, s.Size

注意:在小提琴演示中,我更改了 LinkID 以便它可以清楚地识别结果中的行如何对应于源(第三个表)

dbfiddle 演示


推荐阅读