2016-09-18 109 views
1

我遇到了一些麻煩,找到一種方法來查詢一對基於表上類似的ID。使用SQL根據相似的ID查詢不同的對

我有一個由這樣的數據庫模式:

Class: 
    *Course 
    *Size 
    *Class_ID 

Partner: 
    *Class_ID 
    *Person_ID 
    *Partner_ID 

Person: 
    *Name 
    *Person_ID 
    *Email 

當合作夥伴在課堂上進行選擇,它們被賦予相同的合作伙伴ID。我正在嘗試編寫一個查詢,查詢「經濟學」的所有合作伙伴對。查詢應該是不同的對,即。 a,b和b,a不應同時列出。

到目前爲止,我已經使用Join語句來一起查詢所有內容。

Select * from Person Join Partner On Person.Person_ID = Partner.Partner_ID 
Join Class On Class.Class_ID = Partner.Partner_ID WHERE Class.Course = 'Economics'; 

此查詢爲我提供了每個擁有經濟夥伴的個人的列表。我希望能夠以某種方式將此查詢變爲對。

我認爲group_by Partner_ID函數可能會有所幫助,但我不確定該如何使用它。

+0

樣品的輸入和輸出PLS – Teja

回答

0

如果你正在尋找的是一個方法,從合作伙伴表,其中的過程是「經濟學」,在這裏得到獨特的配對是你能做到這一點的一種方法:

SELECT CASE WHEN P1.Person_ID < P1.Partner_ID THEN P2.Name ELSE P3.Name END name1 
    , CASE WHEN P1.Person_ID < P1.Partner_ID THEN P3.Name ELSE P2.Name END name2 
    , C.Course 
    , P1.Class_ID 
FROM Partner P1 
JOIN Person P2 ON P2.Person_ID = P1.Person_ID 
JOIN Person P3 ON P3.Person_ID = P1.Partner_ID 
JOIN Class C ON C.Class_ID = P1.Class_ID 
WHERE C.Course = 'Economics' 
GROUP BY CASE WHEN P1.Person_ID < P1.Partner_ID THEN P2.Name ELSE P3.Name END 
     , CASE WHEN P1.Person_ID < P1.Partner_ID THEN P3.Name ELSE P2.Name END 
     , C.Course 
     , P1.Class_ID; 
相關問題