【问题标题】:Data structure for grouping items and mapping individual items to other group members用于对项目进行分组并将单个项目映射到其他组成员的数据结构
【发布时间】:2020-04-20 01:58:26
【问题描述】:
我需要创建实体组(特别是文件名)。然后,当给定一个特定的文件名时,我需要获取它的其他组成员。我当前的解决方案包括将文件名放在一个包含两列的 SQLite 表中:文件名和一个整数组 ID。当给定一个文件名时,我会运行这样的查询:
SELECT file_name FROM files WHERE group_id =
(SELECT group_id FROM files WHERE file_name = "sampleFileName.docx")
我想知道这个问题是否有更合适或更高效的解决方案。例如,是否需要考虑其他数据结构?也许可以序列化,或者从数据库表构造?感谢您的任何意见。
【问题讨论】:
标签:
c++
sql
data-structures
mapping
grouping
【解决方案1】:
您的解决方案很好,只要 file_name 是唯一键(否则,子查询可能会返回多条记录,这会产生运行时错误)。
这也可以用自连接来表示:
select f.file_name
from files f
inner join files g on g.group_id = f.group_id
where g.file_name = 'sampleFileName.docx'
【解决方案2】:
如果子查询返回null,您的查询将不会返回任何数据,因此您可以改用exists:
select f.*
from files f
where exists (select 1
from files ff
where ff.group_id = f.group_id and
ff.file_name = 'sampleFileName.docx'
);
如果你有索引files (group_id,file_name),性能会更好。