【问题标题】:How to count occurrences of a foreign table id in a certain table in SQLite?如何计算 SQLite 中某个表中外部表 id 的出现次数?
【发布时间】:2015-10-12 06:33:43
【问题描述】:

所以我有下表:

Table A
a_id    b_id

Table B
b_id    b_name

我想计算表 B 中的 id 显示或用作表 A 中 b_id 列中的值的次数。据推测,结果应该是这样的:

ID     count     name
1      10        aaaa
2      8         bbbb
3      11        cccc

我考虑使用以下查询:

Select b_id from table_b 

获取所有ID。然后遍历它们中的每一个并像这样计算它们:

Select count(*) from table_a where b_id = ''

但是这个过程太长了。我想在一个查询中缩短一点。但我不知道如何使用 SQLite 语言迭代每一行。

(即使只是推动正确的方向也会有所帮助。)

【问题讨论】:

    标签: android sqlite ormlite


    【解决方案1】:

    以下 sql 查询应该可以工作:

       SELECT      a.a_id, 
                   COUNT(b.b_id)    
       FROM        Table_A a
       JOIN  Table_B b on a.b_id=b.b_id
       GROUP BY    a.a_id
    

    以上工作正常:

    这是你的要求吗?

    【讨论】:

      【解决方案2】:

      这可以通过correlated subquery 来完成:

      SELECT b_id AS ID,
             (SELECT COUNT(*)
              FROM TableA
              WHERE TableA.b_id = TableB.b_id
             ) AS count,
             b_name AS name
      FROM TableB;
      

      【讨论】:

      • 这样更有效率吗?我可以在 FROM 关键字之前添加一个 LIMIT 对吗?
      • 例如我只需要 10 个结果
      • 它可能比联接更有效。而如何使用 LIMIT 将是一个不同的问题;使用“”按钮。
      • 我看不出这比加入更有效。你的证据是什么?最好的情况是一样的。在最坏的情况下,它将为每个 id 执行一个子查询。您是否尝试过(例如)表中的 1000 个条目?
      • @Gray SQLite 以相同的方式执行 COUNT(如果有适当的索引)。不同之处在于 GROUP BY 所需的额外处理(请参阅EXPLAIN 输出)。
      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多