2017-08-18 1 views
0

Hier habe ich zwei Tabellen committee_colleges und Hochschulen. Struktur der Tabellen ist so etwas wie diesesSQL Multiple Joins Abfrage

committee_colleges

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

I committeeMemberId von committeeMember table.And ein College bin speichern können mehrere Ausschuss Members.How haben kann ich eine Abfrage wite nur die Hochschulen zugewiesen anzuzeigen bestimmtes Mitglied des Ausschusses. Zum Beispiel, wenn committeeMember von id = 2 angemeldet ist, möchte ich Colleges nach ID = 2,3 anzeigen.

In College Tabelle I wie diese haben,

collegeId typeName 
    1   AICTE 
    2   NCTE 
    3   NTCS 

Dies ist Beisitzer Tabelle

committeeMemberId name 
    1     xyz 
    2     abc 

nun so etwas wie dies schreibe ich, aber ich weiß, seine falsch, weil ich weiß nicht, wie zu Nimm es vom College-Tisch, da ich College-Details zeige.

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 

Kann jemand sagen, wie man Colleges basierend auf seiner Zuordnung zu bestimmten committeeMember anzeigen?

+0

Erwartete Ergebnisse bitte – Sami

+0

Wenn ich mich mit memberId = 2 anmelde, muss ich collegeId = 2,3 colleges anzeigen.Basiert auf CommitteeMemberId Ich muss die entsprechenden Colleges anzeigen –

+0

Welche Spalten Wert Sie in der Ausgabe wollen, wie Sie über Colleges erwähnen aber abgesehen von college-id selektierst du nichts aus dem college-tisch und du könntest auch aus der college_college-tabelle kommen. Wenn Sie die erwartete Ausgabe mit dem Spaltennamen angeben, wäre dies hilfreich für jemanden, der Ihre Frage beantworten würde. –

Antwort

1
verwenden

Sie nah wurden, müssen Sie INNER JOIN statt LEFT JOIN:

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 

EDIT: hinzugefügt DISTINCT

es Hoffnung hilft.

+0

Ich möchte Typ-Spalte in Ausgabe.Aber ich habe nicht es in committee_colleges table.It gibt es in der College-Tabelle –

+0

C. * bedeutet, dass es alle Spalten aus C Aliased Tabelle, die Hochschule ist. Daher wird typeName von der Abfrage zurückgegeben. Welche anderen Spalten benötigen Sie für die Ausgabe? Ich werde die Antwort entsprechend aktualisieren. – Horia

+0

Yea.Only typeName ich brauchte.Vielen Dank. Es funktioniert gut. –

0

Sie können unter SQL-Anweisung für die gleiche

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

versuchen Sie dies:

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

Sie einfach verwenden können Exklusionsverknüpfung für das,

Wenn Sie collegename wollen basierend auf MemberID Verwendung folgende Abfrage,

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' 

Wenn Sie möchten, collegename basierend auf dem Namen des CommitteMembers verwenden Sie dann folgende Abfrage,

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' 

Ich hoffe, es wird helfen.