sql-server - 一个表中所有可能的列与其他表的条件数据的组合
问题描述
LinkedColorSize
我希望结果是SQL Server 中表的颜色和大小两列的组合。我有三张桌子Color
,Size
和LinkedColorSize
。
我有一张桌子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 |
或者别的什么......
我会感谢你的帮助。
解决方案
您可以使用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 以便它可以清楚地识别结果中的行如何对应于源(第三个表)
推荐阅读
- java - 为什么 Active Directory 不返回 PagedResultsResponseControl?
- r - 使用 rvest 和 purrr 用 R 抓取,多页
- perl - Perl:为什么“寻找”不起作用
- javascript - 删除一串数字的最后一个字母
- excel - 按当月计算年平均值
- julia - 预编译使用 ParallelAccelerator 的模块时出现警告
- testing - Web 服务测试用例
- javascript - 模态滑动和打开
- docker - 如何设置 DOCKER_HOST?
- javascript - 如何从生成器函数中的回调函数调用 redux-saga 效果?