2017-08-18 118 views
0

在这里,我有两个表committee_colleges和院校。表 结构是这样的SQL多连接查询

committee_colleges

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

我从committeeMember table.And一所高校存储committeeMemberId可以有多个委员会Members.How我可以WITE一个查询,显示仅分配到学院具体委员会成员。 例如,如果通过id = 2的委员会成员登录,我想通过id = 2,3显示大学。

在大学表我有这样的,

collegeId typeName 
    1   AICTE 
    2   NCTE 
    3   NTCS 

这是委员会成员表

committeeMemberId name 
    1     xyz 
    2     abc 

现在我写这样的事情,但我知道它错了,因为我不知道如何因为我正在显示学院的详细信息,所以请从College表中取出

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 

任何人都可以告诉如何根据其分配给特定委员会显示学院会员吗?

+0

预期结果请 – Sami

+0

当我使用memberId = 2登录时,我需要显示collegeId = 2,3所院校。基于CommitteeMemberId,我需要显示各自指定的院校 –

+0

您在提及高校时需要输出哪些列值但是除了学院校外,你并没有选择大学校园桌上的任何东西,你也可以从委员会的大学表中获得。如果您使用列名称指定预期输出,那么对于能够回答您的问题的人员会有所帮助。 –

回答

1

你被关闭,你需要的INNER JOIN代替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 

编辑:添加DISTINCT

希望它帮助。

+0

我想typeName列在output.But我没有它在committee_colleges表中。它在大学表 –

+0

C. *表示它返回来自C别名表的所有列,这是大学。所以typeName被查询返回。你需要输出哪些其他列?我会相应地更新答案。 – Horia

+0

Yea.Only typeName我需要。谢谢你。它工作正常。 –

0

您可以使用下面的SQL语句相同

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

试试这个:

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' 

如果你想学院名称基于委员姓名,然后使用以下查询,

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' 

希望它能帮上忙。