SQL 到 select 一列的值匹配另一列中的多个值?
SQL to select the value of a column matching multiple values in another column?
我有一个 Chat_User
连接 table,并且想要 检索指定 [=] 之间的 a
的 ChatId
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] =](x
和 y
).
有什么方法可以实现吗?
谢谢
聚合提供了一种方法:
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' 用户的第二个实例。
我有一个 Chat_User
连接 table,并且想要 检索指定 [=] 之间的 a
的 ChatId
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] =](x
和 y
).
有什么方法可以实现吗?
谢谢
聚合提供了一种方法:
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' 用户的第二个实例。