【问题标题】:Mysql query, get exact valueMysql查询,获取准确值
【发布时间】:2015-04-01 11:14:48
【问题描述】:

我有一张像这样的表我正在尝试获取chat_id,其中成员是excat匹配,例如我想获取成员1,2的聊天ID,但是什么时候这样做Select * member_to_chat WHERE member_id IN (1,2)它会返回结果并来自聊天数字 3,这是错误的,因为在这个聊天中我需要 3 个人,如果我给 member_id 1 和 2 来只获得 chat_id 1,是否可以用 mysql 做到这一点,提前谢谢!如果我的英语不好,对不起。

Member_to_chat

id | member_id | chat_id
1       1          1
2       2          1
----------------------
3       1          2
4       3          2
----------------------
5       1          3
6       2          3  
7       3          3

给定member_id 1,2的结果-chat_id必须为1,或者如果我通过1,2,3必须返回chat_id 3,再次感谢您的任何建议

http://sqlfiddle.com/#!9/d7519/3

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    select distinct chat_id
    from member_to_chat m
    where
    not exists (select chat_id 
            from member_to_chat 
            where member_id not in(1,2)
            and chat_id=m.chat_id)
    and exists
           (select chat_id 
            from member_to_chat 
            where member_id=1)
    and exists
           (select chat_id 
            from member_to_chat 
            where member_id=2)
    

    SQLFIDDLE DEMO

    【讨论】:

    • 感谢您的快速回答,但我只需要这个返回的 chat_id 1 和 3,而且这个计数我不知道 chat_id 我怎么知道那个聊天中有多少人跨度>
    • 它只适用于一个and exists (select chat_id from member_to_chat where member_id IN (1,2)) 还是必须适用于每个成员
    • no 只有一个“并且存在(从 member_to_chat 中选择 chat_id where member_id IN (1,2))”它可能会给出不正确的结果
    【解决方案2】:

    我喜欢使用group byhaving 来解决这些问题,因为这是一种非常灵活的方法来测试许多条件。如果您想要任何有 1 和 2(但可能有 3)的聊天:

    select chat_id
    from member_to_chat mtc
    group by chat_id
    having sum(member_id = 1) > 0 and
           sum(member_id = 2) > 0;
    

    只得到 1 和 2 -- 但没有其他:

    select chat_id
    from member_to_chat mtc
    group by chat_id
    having sum(member_id = 1) > 0 and
           sum(member_id = 2) > 0 and
           sum(member_id in (1, 2)) = 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多