【问题标题】: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'
    

    【讨论】:

    • 你知道join是否比嵌套select快吗?
    【解决方案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),性能会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      相关资源
      最近更新 更多