SQL Lite检索正确记录

时间:2015-08-19 14:10:24

标签: mysql sqlite

我有一个名为ChatThreadMember的表。我正在附上表格的数据,以便我的问题得以正确传达。

enter image description here

我正在尝试获取包含我将通过的所有ReceiverInteral的ChatThreadId。

对于前。当我通过以下3个ReceiverInternals

  1. ' F7269470-B8C9-447C-8E85-555D9ECF82B6'
  2. ' 79D49515-A34C-47A7-BDE8-667778B0327C'
  3. ' 9E682E2B-FB3C-41F3-9192-ABFD97D5A8F5'
  4. 我应该只获得6CE1F6A9-8254-4D5A-8C9D-FEC680B60B2F作为ChatThreadId,因为它是唯一包含所有3个ReceiverInternals的ChatThreadId。 然而,在我的所有试验中,我得到了DF04A5D4-E586-4398-B8DB-13B411EOED5D以及我不需要的6CE1F6A9-8254-4D5A-8C9D-FEC680B60B2F

    我的查询是:

    SELECT  cth.ChatThreadId from ChatThreadMember cth where cth.ReceiverInternal in
    ('F7269470-B8C9-447C-8E85-555D9ECF82B6','79D49515-A34C-47A7-BDE8-667778B0327C','9E682E2B-FB3C-41F3-9192-ABFD97D5A8F5')
    and
    cth.ChatThreadId not in(
    SELECT cth.ChatThreadId from ChatThreadMember cth where cth.ReceiverInternal in
    (Select cth.ReceiverInternal from ChatThreadMember cth where cth.ReceiverInternal not in ('F7269470-B8C9-447C-8E85-555D9ECF82B6','79D49515-A34C-47A7-BDE8-667778B0327C','9E682E2B-FB3C-41F3-9192-ABFD97D5A8F5')
    ))
    group by cth.ChatThreadId
    

    我遇到了问题。有帮助吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要存在所有ReceiverInternal所需的所有ID。因此,选择它们,在HAVING子句中对它们进行计数,并解除具有较低计数的ID。

select chatthreadid 
from chatthreadmember
where receiverinternal in
(
  'F7269470-B8C9-447C-8E85-555D9ECF82B6',
  '79D49515-A34C-47A7-BDE8-667778B0327C',
  '9E682E2B-FB3C-41F3-9192-ABFD97D5A8F5'
)
group by chatthreadid
having count(distinct receiverinternal) = 3;