2017-10-12 69 views
2

我需要使用什么SQL查询来获取基于公共参考号的备用零件列表。下面例子中的常见参考是ELS,尽管真实的表格超过了100,000行并带有变量引用。基于公共字段的SQL查询

表A

**Reference  Part** 
ELS   test1 
ELS   test2 
ELS   test3 

结果

**Part   Alternative Part** 
test1   test2 
test1   test3 
test2   test1 
test2   test3 
test3   test1 
test3   test2 

回答

2

您可以使用cross join

select t1.part, t2.part 
from t t1 join 
    t t2 
    on t1.els = t2.els and t1.part <> t2.part; 
+0

排序,谢谢! – Emma

+0

错误在整个表上运行 - Msg 1101,级别17,状态10,第4行 由于文件组'DEFAULT'中的磁盘空间不足,无法为数据库'TEMPDB'分配新页面。通过删除文件组中的对象,将其他文件添加到文件组或为文件组中的现有文件设置自动增长来创建必要的空间。 – Emma

+0

@Emma。 。 。你可能有一些非常大的团体。 –

2

这可以用一个简单的自我完成加入

create table #test (reference varchar(10), part varchar(10)) 
insert into #test values ('ELS', 'test1'), ('ELS', 'test2'), ('ELS', 'test3') 

select t1.part as part, 
     t2.part as alternate_part 
from #test t1 
    inner join #test t2 on t1.reference = t2.reference 
where t1.part <> t2.part 
order by 1 

drop table #test 

结果是这样的

part alternate_part 
---- -------------- 
test1 test2 
test1 test3 
test2 test1 
test2 test3 
test3 test1 
test3 test2