繁体   English   中英

查找具有相同值的行 (PostgreSQL)

[英]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.

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