SQL查询内部联接
我正在使用SQLServer2008R2。 我有两张桌子,我们说TblGroup和TblComplatedDetails TblGroup包含组的名称以及MemberId和GroupType,即Daily、Weekly、Start、End和TblComplatedDetails包含GroupId,即TblGroup的外键以及完成的日期时间。 现在,我只需要在TblCompletedDetails中没有记录的情况下,才需要所有特定MemberId的组,GroupType=End和Start类型的组除外。因此,记录集如下所示:SQL查询内部联接,sql,sql-server-2008,Sql,Sql Server 2008,我正在使用SQLServer2008R2。 我有两张桌子,我们说TblGroup和TblComplatedDetails TblGroup包含组的名称以及MemberId和GroupType,即Daily、Weekly、Start、End和TblComplatedDetails包含GroupId,即TblGroup的外键以及完成的日期时间。 现在,我只需要在TblCompletedDetails中没有记录的情况下,才需要所有特定MemberId的组,GroupType=End和Start类型的组
TblGroup
==================================
Id MemberId GroupType
==================================
1 1 Daily
2 2 Daily
3 3 Daily
4 1 Weekly
5 1 Start
6 2 Weekly
7 2 Start
8 2 End
9 1 End
10 1 End
TblCompletedDetails
======================================
Id GroupId CompletedDate
======================================
1 1 xxxxxxxxxxxxxx
2 2 xxxxxxxxxxxxxx
3 3 xxxxxxxxxxxxxx
4 4 xxxxxxxxxxxxxx
5 1 xxxxxxxxxxxxxx
6 2 xxxxxxxxxxxxxx
7 3 xxxxxxxxxxxxxx
8 5 xxxxxxxxxxxxxx
9 6 xxxxxxxxxxxxxx
因此,对于MemberId=1,所需的组可以是:
=======
GroupId
=======
1
4
但对于MemberId=2,期望的结果是:
=======
GroupId
=======
2
6
7
因为7是在TblCompletedDetails中没有外键的组的开始类型。
有人知道吗?等待您有价值的回复。您可能需要使用TblGroup grp 1。grp.GroupType不在“End”2中。grp.GroupType='Start'并从TblCompletedDetails tcd中选择count*,其中grp.GroupId=tcd。GroupId@NaveenBabu在这种情况下,我将只获取组的开始类型的记录。我想要所有类型的组,除了End类型和start类型的组,TblCompledDetails中不能有记录。
select g.ID GroupID
from TblGroup g
where g.MemberID = @MemberID
and g.GroupType <> 'end'
and
(
-- Row is qualified if it is not start
g.GroupType <> 'start'
-- Or, if it is, does not have an entry in TblCompletedDetails
or not exists (select *
from TblCompletedDetails d
where d.GroupId = g.ID)
)