Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQL从与一组行完全匹配的多对多关系中进行选择_Android_Sql_Sqlite - Fatal编程技术网

Android SQL从与一组行完全匹配的多对多关系中进行选择

Android SQL从与一组行完全匹配的多对多关系中进行选择,android,sql,sqlite,Android,Sql,Sqlite,我在Android应用程序中有一个SQLite3数据库,其中包含对话和参与者表。我想要一个查询,在给定参与者列表的情况下,只返回那些参与者列表与给定参与者列表完全匹配的对话。例如,给定以下表格: CONVERSATIONS CONVERSATION_PARTICIPANTS ------------- ------------------------- id conversation_id name -- -----------

我在Android应用程序中有一个SQLite3数据库,其中包含对话和参与者表。我想要一个查询,在给定参与者列表的情况下,只返回那些参与者列表与给定参与者列表完全匹配的对话。例如,给定以下表格:

CONVERSATIONS    CONVERSATION_PARTICIPANTS
-------------    -------------------------
id               conversation_id name
--               --------------- ----
 1               1               u1 
 2               1               u2
 3               2               u1
 4               3               u1
我期望以下输出([参与者输入]=>[对话输出]):

  • [u1]=>[2,3]
  • [u2]=>[]
  • [u1,u2]=>[1]

我见过一些解决方案,包括将参与者姓名的有序列表串联起来,但如果可能的话,我不想走这条路。这可能吗?没有临时表格?

要根据单个项目检查两个集合是否不相等,您必须检查两个集合中是否存在其他集合中不存在的任何项目

假设我们有一个表
Input(name)
,它可以这样实现:

SELECT id
FROM Conversations
WHERE NOT EXISTS (SELECT 1
                  FROM Conversation_Participants
                  WHERE conversation_id = Conversations.id
                    AND NOT EXISTS (SELECT 1
                                    FROM Input
                                    WHERE name = Conversation_Participants.name))
  AND NOT EXISTS (SELECT 1
                  FROM Input
                  WHERE NOT EXISTS (SELECT 1
                                    FROM Conversation_Participants
                                    WHERE conversation_id = Conversations.id
                                      AND name = Input.name))
如果不想为
输入使用(临时)表
,则可以使用动态返回值的子查询替换该表:

... FROM Input ...
... FROM (SELECT 'u1' AS Name UNION ALL SELECT 'u2') AS Input ...