注意:使用Posterre
我试了几个小时,看了很多帖子,但还是想不出如何进行这个查询。
"我有两张table"
聊天桌
| ID|是群聊|
| --|--|
| 1 |虚假|
| 2 |虚假|
user_chat表(与用户表链接)
| 聊天标识|用户标识|
| --|--|
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 3 | 4 |
| 3 | 2 |
我需要选择聊天,这是两个用户之间的唯一。
我已经做到了
select c.id as c_id, c.chat_name as chat_name, c.created_at as created_at
from chats c
left join user_chats uc on uc.chat_id = c.id
where c.is_group_chat = false
and uc.user_id = '39438219-1488-4e6f-820a-2ba16ba12e01'
intersect
select c.id as c_id, c.chat_name as chat_name, c.created_at as created_at
from chats c
left join user_chats uc on uc.chat_id = c.id
where c.is_group_chat = false
and uc.user_id = '16c1beb9-687a-45b3-8d2b-88c71a681168';
字符串
如您所见,我需要编写两次几乎相同查询,有没有更好方法来做到这一点
先谢了。
3条答案
按热度按时间kb5ga3dv1#
根据您的示例查询,您似乎只对特定用户感兴趣。这是基于该外观。
使用
HAVING
子句。此外,由于您希望查询用户ID,因此您可以INNER JOIN(不是左联接)到user_chat。个字符
| 聊天标识|聊天名称|创建于|
| --|--|--|
| 1 |水果|2023-10-01T00:00:00.000Z|
View on DB Fiddle
9w11ddsr2#
您可以简单地连接表,按聊天id对行进行分组,然后对它们进行计数。
字符串
ddrv8njm3#
如果你想包含涉及其他用户的聊天,只需删除
count()
过滤器:字符串
如果您可能需要检查两个以上的用户ID(或者如果您只想使用具有两个ID的版本):
型