2009-08-04 4 views
2

私は2つのテーブルどのように右/左の結合を検索しますか?

tblcourse

-courseid

-name

-status tblenroll

-courseidを持っている、複数のテーブル を検索する問題が生じています(tblcourseからcourseidを保持)

-studentid

学生は学生NUMとして1990を持っており、彼は私が1990年にあり、彼はaintのものが

に加入していることコースの名前を取得したいtblenrol

で2コースに登録言うことができます

私はちょうどtblcoursesに右外部に参加していますが、私は望みの結果を得ていますが、where節を付けると、彼の学生番号を取得できない残りのコースを教えてくれません。

助けてください! (OPによって投稿の答えから追加)

EDIT

ねえ、返信いただきありがとうございます。私はそれを適切に説明したとは思わない。

tblcourseたちは6コースを持っている想像し、 tblenrollはそう多く就学

を保持している多くの講座を開催します。学生の1のための3、学生1880のための1990個のレジスタ(1990ピックしなかったこと1)

私たちは、この実行すると:

WHERE (tblenroll.studentid = 1990 or tblenroll.studentid is null) 

または

where e.studentid is null or e.studentid is not null and e.studentid = 1990 

を、それが5コースをピックアップします、 3は1990年に登録され、2はNULLです。 1 1990 - - 3 NULL第六1は、このクエリは、右の結果をもたらすではなく、私は

1880を取得します上記で特定の生徒

SELECT 
    tblenroll.studentid as stud, 
    tblcourse.name, 
    tblenroll.studentid, 
    tblenroll.courseid, 
    tblcourse.courseid, 
FROM 
    tblenroll 
Right Join tblcourse ON tblenroll.courseid = tblcourse.courseid 

のために1880年

に登録されています - 2

混乱するもの!

+1

あなたは、SQLを投稿することができますか? – andrewWinn

答えて

2
select tblcourse.name, e.studentid 
from tblcourse c left join tblenroll e on c.courseid = e.courseid 
where e.studentid is null or e.studentid is not null and e.studentid = :id 

それはあなたが1または0、trueまたはfalseのいずれかを置くためにIIF関数のようなものを使用することができ、あなたのDBに応じて、

course1 1990 
course2 NULL 
course3 NULL 
course4 1990 
... 

になります - 2番目の要素としてどんなフラグ

0

あなたはたぶん、studentidにあなたが照会している実際のIDだけでなくヌルであるようにする必要があります。例えば

してみてください:

SELECT tblenroll.studentid, tblcourse.courseid, tblcourse.name, tblcourse.status 
FROM tblenroll RIGHT OUTER JOIN tblcourse ON tblenroll.courseid = tblcourse.courseid 
WHERE (tblenroll.studentid = 1990 
or tblenroll.studentid is null) -- this allows the courses in which 1990 is not enrolled 

編集:私は非常に最初の時間を介してこれを考えていませんでした。上記のクエリはわかりやすいアプローチであり、おそらくOP が望んでいないのと同じ結果を返すでしょう。このトリックは、表が結合された後にwhere句を使用するのではなく、結合に参加するtblenrollから行を制限することです。

私は(私はSQL Server 2005の上で同様のテーブル/構造とそれをテストした)、これは動作するはず信じて:

SELECT tblenroll.studentid, tblcourse.courseid, tblcourse.name, tblcourse.status 
FROM tblenroll RIGHT OUTER JOIN tblcourse ON tblenroll.courseid = tblcourse.courseid 
    AND tblenroll.studentid = 1990 
関連する問題