sql - 获取所有可能的条目 SQL Join
问题描述
给定以下产品和替代表,我怎样才能获得具有所有可能性的输出?
产品表
> Category | Year | Product Code
> :--------|------|-------------
> Animals | 1998 | A0001
> Sports | 2001 | A0002
替换表
> Product From | Product To
> :------------|------------
> A0001 | A0003
> A0002 | A0004
> A0003 | A0005
> A0004 | A0006
> A0006 | A0007
产品 A0001 被替换为 A0003,然后 A0003 被替换为 A0005。
产品 A0002 替换为 A0004,A0004 替换为 A0006,然后 A0006 替换为 A0007。
所需的输出是:
> Category | Year | Product From | Product To
> :--------|------|--------------|-----------
> Animals | 1998 | A0001 | A0003
> Animals | 1998 | A0003 | A0005
> Sports | 2001 | A0002 | A0004
> Sports | 2001 | A0004 | A0006
> Sports | 2001 | A0006 | A0007
我认为 COALESCE 函数可能对我有帮助,但我无法构建查询。
解决方案
一个简单的连接不能产生这个结果。您需要遍历一个转换图来生成每个查询。您可以使用CTE通过递归查询来执行此操作
鉴于这些表格:
declare @product table ( Category nvarchar(30), Year int, ProductCode nvarchar(30))
insert into @product
values
('Animals',1998 ,'A0001'),
('Sports' ,2001,'A0002');
declare @substitusion table (ProductFrom nvarchar(30),ProductTo nvarchar(30));
insert into @substitusion
values
('A0001','A0003'),
('A0002','A0004'),
('A0003','A0005'),
('A0004','A0006'),
('A0006','A0007');
此查询将遍历转换并生成所需的结果:
with x as (
--Create the initial result by joining Product and Substitution
select Category,Year,ProductFrom,ProductTo
from @product p inner join @substitusion s on p.ProductCode=s.ProductFrom
union all
--Join the *previous* result with the next Substitution
select Category,Year,next.ProductFrom,next.ProductTo
from x as previous
inner join @substitusion next on previous.ProductTo=next.ProductFrom
)
select *
from x
order by Category
这产生:
Category Year ProductFrom ProductTo
Animals 1998 A0001 A0003
Animals 1998 A0003 A0005
Sports 2001 A0002 A0004
Sports 2001 A0004 A0006
Sports 2001 A0006 A0007
第一个查询通过连接Product
和生成第一个结果Substitution
。下一个查询通过将前一个 ProductTo 连接到下一个 ProductFrom 将任何以前的结果与下一个替换连接起来
推荐阅读
- twitter-bootstrap - 如何划分页面以创建小部件?
- python - Selenium WebDriverException 与无头镀铬
- javascript - JavaScript/jQuery - 未捕获的 TypeError - 但变量已在脚本中启动
- r - 计算两列的百分比并将值添加到新数据框
- python - 从 WebDriver 元素中检索属性
- python - 迭代多处理列表的结果会消耗大量内存
- javascript - 验证
点击谷歌地图自动完成的结果后清除输入 - bamboo - Bamboo - 为运行时动态给出的分支构建
- javascript - 如何在下拉列表中显示值?
- r - 如何在没有完整样本数据的情况下进行配对 t 检验?