在mysql中选择具有相同值的另一列的行

时间:2014-05-10 15:28:24

标签: mysql sql

我有一个表来管理用户之间聊天的对话,结构如下。

id | user_id | conversation_id

让我们说在与ID 1的对话中,有3个人可以聊天,还有2个人的对话,以及2个人

Conversations_users表将如下所示

   id | user_id | conversation_id
    1      1              1
    2      2              1
    3      4              1
    4      3              2
    5      4              2

现在只拥有用户34以及非对话ID 的ID我想选择属于该用户的对话,因此口头查询应该是:

Select from conversations_users, where in user_id = 3 and 4 and conversation_id is equals to conversation id of user 3 and 4

我如何构建这个"口头查询"在Mysql中?

3 个答案:

答案 0 :(得分:1)

这是一种方法:

select uc.conversation_id
from UserConversions uc
where uc.user_id in (3, 4)
group by uc.conversation_id
having count(*) = 2;

如果表格可能有重复项,则您需要:having count(distinct user_id) = 2

编辑:

如果您需要特定列表,只需将where条件移至having子句:

select cu.conversation_id
from conversations_users cu
group by cu.conversation_id
having sum(cu.user_id in (3, 4)) = 2 and
       sum(cu.user_id not in (3, 4)) = 0;

答案 1 :(得分:1)

让用户3和4所属的会话中的所有用户都可以使用此功能:

select distinct(user_id) from conversation_table where conversation_id in (select distinct(conversation_id) from conversation_table where user_id in (3,4));

虽然不会很快

要获得他们的实际对话,我假设你有一个不同的表格中包含文字:

你可能想要这样的东西

select distinct(u.user_id), c.text from conversation_table u left join conversations c on c.id=u.conversation_id where u.conversation_id in (select distinct(conversation_id) from conversation_table where user_id in (3,4));

这是一个sqlfiddle

答案 2 :(得分:0)

我假设您有另一个名为“对话”的表,其中包含您真正想要的数据。

SELECT *
FROM conversations, conversations_users
WHERE conversations_users.user_id in (3,4)
    AND conversations.id = conversations_users.conversation_id