gpt4 book ai didi

sqlite - 在一个查询中加载引用数据的有效方法

转载 作者:行者123 更新时间:2023-12-03 18:13:42 24 4
gpt4 key购买 nike

我的应用程序使用数据库来保存其数据。我有表 Objects看起来像

localID  |   title   |  content
1 Test "1,embed","3,embed","5,append"

和另一张 table Contents看起来像
localID  |  content
1 Alpha
2 Beta
3 Gamma
4 Delta
5 Epsilon

主应用程序在主线程中运行,整个数据库在第二个线程中运行。因此,如果我的应用程序加载,我想将每条记录(QSqlRecord)传递到主线程,在那里它得到进一步处理(加载到真实对象中)。我通过信号传递该记录。但我的数据被分成 2 个表。我想返回包含两者的记录,可能类似于连接:
localID  |   title   |  content
1 Test "Alpha,embed","Gamma,embed","Epsilon,append"

因此,通过这种方式,我将在一个线程返回值之后立即获得所有需要的信息。如果不合并,我将不得不为每个引用的内容调用数据库。
我希望数据库包含少于 100.000 条记录,但某些内容可能很大(保存为 blob 的文件,例如一本大小为 300 mb 左右的书)。

我有两个问题:
  • (如何)我可以在查询中(有效地)以这种方式加入表吗?
  • 我是否太关心线程并且应该使其成为单线程?
    这样我就不需要为多个读取请求而烦恼。

  • 作为一个sidenode,这是我在Database Admins 上的第一篇文章,我不太确定这个站点或Stackoverflow 是否适合问这个问题。

    最佳答案

    对于任何实际问题,请使用@Vérace 在评论中推荐的方式,
    即“链接”表。就是这样。

    但是,如果您要么被迫保留数据库结构
    或为了好玩
    或用于学习(由迁移标题指示),
    然而,学习肮脏的技巧,而不是好的设计......
    看看这个:

    select
    localID, title,
    (
    with recursive cnt(x) as
    ( select ','||a.content
    union all
    select replace(x, '"'||b.localID||',', '_"'||b.content||',')
    from cnt, toy2 as b
    )
    select replace('_"'||replace(x, ',_"', ',"'), '_","', '"') from cnt
    where not x like '%,"%' LIMIT 1
    ) as 'content' from toy as a;
  • 使用递归方法灵活
    (不假设 AlphaBeta 表中的条目数或其使用次数)
    用希腊语替换数字
  • 应用带有“_”的命名方案来创建结束条件
  • 在内容前加上“_”,使其被处理
    并配合结束条件
  • 清理结束条件“_”以获得所需的输出
  • 清除输出行开头的特殊情况
  • 选择递归的结果以及其他所需的输出

  • 请注意您的表不自然包含“__”或“_”的假设。如果发生这种情况,请在那里选择更多“奇怪”的字符串。如果您的表中有各种各样的字符串,那么您可以看看 Verace 描述为“即将发生的灾难”的一个非常温和的示例。实际上,这种不平凡的解决方案本身可能就是一场灾难。

    输出( .headers on.mode column ):
    localid     title       content
    ---------- ---------- --------------------------------------------
    1 Test "Alpha,embed","Gamma,embed","Epsilon,append"
    2 mal "Beta,append","Delta,embed"

    这是我的 mcve ( .dump ),还有一行“mal”用于测试目的:
    BEGIN TRANSACTION;
    CREATE TABLE toy (localid int, title varchar(20), content varchar(100));
    INSERT INTO toy VALUES(1,'Test','"1,embed","3,embed","5,append"');
    INSERT INTO toy VALUES(2,'mal','"2,append","4,embed"');
    CREATE TABLE toy2 (localID int, content varchar(10));
    INSERT INTO toy2 VALUES(1,'Alpha');
    INSERT INTO toy2 VALUES(2,'Beta');
    INSERT INTO toy2 VALUES(3,'Gamma');
    INSERT INTO toy2 VALUES(4,'Delta');
    INSERT INTO toy2 VALUES(5,'Epsilon');
    COMMIT;

    SQLite 3.18.0 2017-03-28 18:48:43

    关于sqlite - 在一个查询中加载引用数据的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804358/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com