SQL 到 select 一列的值匹配另一列中的多个值?

SQL to select the value of a column matching multiple values in another column?

我有一个 Chat_User 连接 table,并且想要 检索指定 [=] 之间的 aChatId x 的 17=] 和 y

Chat_User table:

Id  ChatId  UserId 
1   a       x   <===
2   b       z
3   a       y   <===
4   c       x

我试过了:

SELECT ChatId
WHERE UserId IN ('x','y')
GROUP BY ChatId;

但是它 returns ChatId of a and c, 但我只想要 a, 因为它有我指定的 [=17] =](xy).

有什么方法可以实现吗?

谢谢

聚合提供了一种方法:

SELECT ChatId
FROM yourTable
WHERE UserId IN ('x', 'y')
GROUP BY ChatId
HAVING MIN(UserId) <> MAX(UserId);

另一种方法是只从您知道自己想要的一个开始,然后 re-self-join 到该 ID 和其他用户的相同 table。确保 (userid, chatid ) 上的 table 上有一个索引,以帮助优化查询。

select distinct
      YT.ChatID
   from
      YourTable YT
         JOIN YourTable YT2
            on YT2.UserID = 'y'
            AND YT.ChatID = YT2.ChatID
   where
      YT.userID = 'x'

这样,外部 WHERE 子句只会考虑其中一方的最低限度的聊天,因此您甚至不会考虑其他任何人。只有在拥有 'x' 的用户之后,它才会考虑查看具有相同聊天的 'y' 用户的第二个实例。