繁体   English   中英

SQL多联接查询

[英]SQL Multiple Joins Query

在这里,我有两个表Committee_Colleges和Colleges。 表的结构是这样的

committee_colleges

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

我从委员会成员表中存储了委员会成员编号。一个学院可以有多个委员会成员。我如何查询以仅显示分配给特定委员会成员的学院。 例如,如果id = 2的CommitteeMember已登录,我想显示id = 2,3的大学。

在大学的桌子上我有这​​样的感觉

    collegeId typeName
    1         AICTE
    2         NCTE
    3         NTCS

这是委员会成员表

    committeeMemberId name
    1                 xyz
    2                 abc 

现在我正在写这样的东西,但是我知道它是错误的,因为我不知道如何从College表中获取它,因为我正在显示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

任何人都可以根据对特定委员会成员的分配来告诉他们如何显示大学吗?

您接近了,您需要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

希望能帮助到你。

您可以使用下面的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)

尝试这个:

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

您可以为此使用简单的内部联接

如果您希望基于memberId的大学名称,请使用以下查询,

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'

如果您希望基于committemember名称的大学名称,则使用以下查询,

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'

希望它会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM