2017-10-12 162 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