2016-09-18 35 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; 
相关问题