2012-08-29 43 views
0

我有一個表,學生類女巫包含了學生證和類IDSQL搜索:N表在Sybase

CREATE TABLE [StudentClass] 
([StudentId] varchar(20), [ClassId] varchar(20)); 

我想要做的是找到一個學生的所有同學。 例如:

student 1 in class 1 
student 1 in class 2 
student 2 in class 2 

,如果我做了student1搜索我想要得到的結果是:
student1 | STUDENT2
我實際得到的是:

student1 | null 
student1 | student2 

如果我只有第一行:

student 1 in class 1 

結果預計將是:

student1 | null 

select distinct s1.StudentId, s2.StudentId 
from StudentClass s1 
      left join StudentClass s2 
        on s1.ClassId = s2.ClassId and 
         s1.StudentId != s2.StudentId 
where s1.StudentId = 'Student1' 

感謝您的幫助

回答

0

將這個加入你的查詢

SELECT... 
FROM.. 
WHERE... 
     AND s2.StudentId IS NOT NULL -- <== this condition 
+0

這種情況不會在這種情況下工作: 如果我只有第一行: 學生1級1 預期的結果是: student1 | null –

0

嘗試使用group by代替distinct

select s1.StudentId as std1, s2.StudentId as std2 
from StudentClass s1 
      inner join StudentClass s2 
        on s1.ClassId = s2.ClassId and 
         s1.StudentId != s2.StudentId 
where s1.StudentId = '1' 
group by s1.StudentId, s2.StudentId 

你可以檢查一下我們的here

+0

第一個例子的結果將有2行student1 | null和student 1 |學生2.我想要的是隻有第二排如果同學存在,如果它不像student3 | null –

+0

在我回答底部的鏈接中:它找到了像你要求的「學生的所有同學」。沒有'NULL'值。在這個例子中,student-1在2班有兩個同學,這就是查詢提取的內容,另外兩個學生(在STD2下)。 – alfasin

+0

我試過,但對我來說,它返回他們,也許是因爲我的分貝,我使用sybase –