代码之家  ›  专栏  ›  技术社区  ›  Kris B

两个表之间的SQLite计数

  •  -1
  • Kris B  · 技术社区  · 7 年前

    我不确定这在SQLite(Android应用程序)中是否可行,因为它可能需要 INNER JOIN OUTER JOIN 哪个sqlite不支持。

    我试图输出 JOIN 在包含一个表中字段计数的两个表之间:

    [Table1]
    ID  Title
    1   "Title 1"
    2   "Title 2"
    3   "Title 3"
    
    [Table2]
    ID PID Title      New
    1  1   "Title 1a"  0
    2  2   "Title 2a"  1
    3  2   "Title 2b"  1
    4  3   "Title 3a"  0
    5  3   "Title 3b"  0
    
    Desired output:
    1  0  "Title 1"
    2  2  "Title 2"
    3  0  "Title 3"
    

    我所拥有的:

    SELECT Table2.pid,count(Table2.pid),Table1.title
    FROM Table1
    JOIN Table2 
    ON Table2.pid = Table1.id
    WHERE Table2.new = 1
    GROUP BY Table2.pid
    

    2  2  "Title 2"
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   forpas    7 年前

    您可以通过在子查询中聚合来获得所需的值:

    select 
      (select count(*) from Table2 t2 where t2.pid = t1.id and t2.New = 1) counter,
      t1.Title
    from
      Table1 t1 
    

    demo

    另一个使用group by的解决方案:

    select 
      count(t2.Title) counter, 
      t1.Title 
    from Table1 t1
    left join (
      select * from Table2 where new = 1
    ) t2
    on t2.pid = t1.id
    group by t1.Title
    

    demo

        2
  •  0
  •   DinoCoderSaurus    7 年前

    您可以使用sqlite中的左连接来实现这一点。简单地改变 JOIN LEFT JOIN . 从…起 the doc :

    已应用ON或USING筛选子句,将添加一行 在复合数据集中根本不对应任何行的数据集 通常包含从右侧输入数据集中复制的值。

    当表2中没有行时,它将返回null。(也许你可以用一个 CASE 语句显示0,但我不熟悉该接口)。

    推荐文章