2017-08-18 27 views
0

ここで私は2つのテーブルcommittee_collegesと大学を持っています。テーブルの 構造は、このSQL複数の結合クエリ

committee_colleges

committeeCollegeId collegeId committeeMemberId 
    1     2   1 
    2     2   2 
    3     3   2 

のようなものです私は1つの大学が複数の委員会Members.Howを持つことができますcommitteeMember table.AndからcommitteeMemberIdを格納しています私はに割り当てられているだけの大学を表示するクエリをWITEすることができます特定委員会メンバー。 たとえば、id = 2のcommitteeMemberがログインしている場合、id = 2,3で大学を表示したいとします。

私はこのように、

collegeId typeName 
    1   AICTE 
    2   NCTE 
    3   NTCS 

これは委員会のメンバー表である

committeeMemberId name 
    1     xyz 
    2     abc 

今、私はこのような何かを書いていましたが、私はどのように知らないので、私はその間違ったを知っている大学のテーブルで

私は大学の詳細を表示しているので、カレッジのテーブルから取り出してください。

SELECT cc.committeeCollegeId as committeeCollegeId, 
     c.collegeId as collegeId, 
     cc.committeeMemberId as committeeMemberId 
FROM committee_college as cc 
left outer join College as c 
    on cc.collegeId = c.collegeId 
where cc.committeeMemberId=:committeeMemberId 
order by cc.committeeCollegeId asc 

特定のcommitteeMemberへの割り当てに基づいて大学を表示する方法を教えてもらえますか? EDIT

SELECT DISTINCT C.typeName --<<== put here all the columns that you want in output 
FROM committee_colleges CC 
     INNER JOIN college C 
      ON C.collegeId = CC.collegeId 
WHERE CC.committeeMemberId = 2 --<<== your input parameter 

DISTINCTがそれを願って追加あなたは、あなたがINNER JOIN代わりLEFT JOIN閉じる必要があるし、同じ

DECLARE @committeeMemberId INT = 2 -- Id of Committee member 

;WITH CTE_MemberCommittee AS 
(
    SELECT CollegeId 
    FROM committee_colleges 
    WHERE committeeMemberId = @committeeMemberId 
) 

SELECT collegeId, typeName 
FROM college 
WHERE collegeId IN (SELECT CollegeId FROM CTE_MemberCommittee) 
+0

期待された結果 – Sami

+0

memberId = 2を使用してログインすると、collegeId = 2,3の大学を表示する必要があります。CommitteeMemberIdに基づいて割り当てられた各カレッジを表示する必要があります –

+0

大学について言及しているとおり、しかし、カレッジドを除いて、あなたはカレッジのテーブルから何も選択していないし、委員会のテーブルからも取得できます。列名で期待される出力を指定すると、あなたの質問に答える人にとっては役に立ちます。 –

答えて

1

のためのSQL文の下に

+0

outputNameにtypeNameの列を入れたいのですが、それはcommittee_collegesテーブルにあります。これは大学のテーブル –

+0

にあります。*は、Cエイリアステーブルからすべてのカラムを返します。したがって、queryによってtypeNameが返されています。出力に必要な他の列はどれですか?私はそれに応じて答えを更新します。 – Horia

+0

Yea.Only typeName名前が必要です。ありがとうございます。うまくいきます。 –

0

使用することができます助けてください。

0

これを試してみてください。

DECLARE @LoginCommitteeMemberId INT=2 
SELECT t2.Name AS MemberName, 
     t3.TypeName AS CollageName 
    FROM committee_college t1 
    INNER JOIN Committee_Member t2 
    ON t1.committeeMemberId = t2.committeeMemberId 
    INNER JOIN College as t3 
    ON t1.collegeId = t3.collegeId 

    WHERE t1.committeeMemberId = @LoginCommitteeMemberId 
0

あなたはシンプルなインナーは、そのための結合を使用することができ、必要であれば、クエリ、次のMEMBERIDの使用に基づいてcollegenameたい場合

select a.collegeid,a.typeName from 
college a, committee_colleges b, committe_member c 
where a.collegeid = b.collegeid and 
b.committeememberid = c.committeeMemberId 
and c.committeeMemberId = '2' 

colletemember名に基づいてcollegameを作成し、次のクエリを使用します。

select a.collegeid,a.typeName from 
college a, committee_colleges b, committe_member c 
where a.collegeid = b.collegeid and 
b.committeememberid = c.committeeMemberId 
and c.Name = 'xyz' 

希望すると助かります。

関連する問題