[英]Finding rows with identical values (PostgreSQL)
我目前正在使用 PostgreSQL 进行聊天功能,我存储对话的方式是将每个对话的成员存储在一个名为 conversationMember 的单独表中。
| convomemberId | conversationId | userId |
-----------------------------------------------------------------------------------------------
| UUID | ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2 | d2119e47-b122-41b5-a425-afde47fd36ba |
-----------------------------------------------------------------------------------------------
| UUID | ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2 | f9a3572c-3424-408f-8c06-6422728ef847 |
如您所见,我将每一行都存储有 conversationId 和 userId,以便我可以轻松检查哪个用户在对话中。 但目前我现在需要一个 function 来检查数据库中是否存在两个用户之间的对话。 所以我想知道是否有办法让我执行 SQL 查询以获取基于 2 个用户 ID 的会话 ID。
例如
输入:用户 ID:“d2119e47-b122-41b5-a425-afde47fd36ba”和用户 ID:“f9a3572c-3424-408f-8c06-6422728ef847”
Output:conversationId:“ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2”
你可以这样做(结果在这里)
select c1.conversation_id
from conversation c1, conversation c2
where c1.conversation_id = c2.conversation_id
and c1.user_id = 'd2119e47-b122-41b5-a425-afde47fd36ba'
and c2.user_id = 'f9a3572c-3424-408f-8c06-6422728ef847';
试试这个 select:
select cm.userId, dup.conversationId from
(select count(*) cnt, conversationId from conversationMember group by conversationId having count(*)>1) dup,
conversationMember cm
where cm.conversationId=dup.conversationId;
结果应该是:
cm.userId dup.conversationId
d2119e47-b122-41b5-a425-afde47fd36ba ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2
f9a3572c-3424-408f-8c06-6422728ef847 ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2
select t1.conversationId
from conversationMember t1 inner join conversationMember t2 on
(t1.conversationId=t2.conversationId)
where t1.userId='d2119e47-b122-41b5-a425-afde47fd36ba'
and t2.userid='f9a3572c-3424-408f-8c06-6422728ef847';
结果
conversationid
--------------------------------------
ddbde2ae-17f3-47da-94d2-a3dffd9ee7e2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.