我有下面的表格
<<p>表strong> GroupChatGroupChatId int
GroupCode varchar(20)
Name varchar(50)
<<p>表strong> GCMembersID int
ParticipantUserID int
GroupChatID int
<<p>表strong>ID
Sender
Receiver
我运行以下查询
Select distinct GC.GroupChatID, GC.Name
from Chats chats
inner join GroupChats GC on chats.Receiver = GC.GroupCode
inner join GCMembers GCM on GC.GroupChatID = GCM.GroupChatID
where GCM.ParticipantUserID = 3
这工作完美,但我只想有不同的GroupChatID
。换句话说,如果GroupChatID
已经存在于查询结果中,则不必添加它。值GCM.ParticipantUserID
来自另一个表(外键),不需要与这个问题做任何事情,所以我没有包括在这里。任何int
值都可以。
我怎么才能做到呢?提前感谢您的帮助。
示例数据GroupChat
GroupChatID - GroupCode - Name
1 GC1 Group1
2 GC2 Group2
,
Chats
ID - SENDER - RECIEVER
1 2 GC1
2 3 GC2
3 3 GC1
4 3 GC1
GCMembers
ID - ParticipantUserID - GroupChatID
1 2 1
2 3 1
3 3 2
输出应该是
GroupchatID:1 and Name:Group1
您要找的是OVER(PARTITION BY...)
。
不幸的是,我没有一个SQL服务器运行的时刻,我不想写代码未经测试,但你可以找到下面的例子:https://www.sqlshack.com/sql-partition-by-clause-overview/
您需要对行进行分组,并为Name
选择任何值。SQL没有ANY
函数,但是您可以使用MIN
或MAX
:
Select GC.GroupChatID, MIN(GC.Name) AS Name
from Chats chats inner join GroupChats GC on chats.Reciever=GC.GroupCode
inner join GCMembers GCM on GC.GroupChatID=GCM.GroupChatID
where GCM.ParticipantUserID=3
GROUP BY GC.GroupChatID