两个表之间的SQLite计数

时间:2019-01-27 21:52:22

标签: sqlite android-sqlite

我不确定这是否可能在SQLite中(对于Android应用程序)是否可能实现,并且可能不支持sqlite不支持的INNER JOINOUTER JOIN

我正在尝试在两个表之间输出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 个答案:

答案 0 :(得分:2)

您可以通过在子查询中进行汇总来获取所需的值:

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

请参见demo

分组依据的另一种解决方案:

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

答案 1 :(得分:0)

您可以使用sqlite中的LEFT JOIN进行操作。只需将JOIN更改为LEFT JOIN。来自the doc

  

如果加入操作员是“ LEFT JOIN”或“ LEFT OUTER JOIN”,则在   如果应用了ON或USING过滤子句,则额外一行   添加到原始左侧输入中每一行的输出中   组合数据集中根本没有行的数据集   (如果有)。添加的行的列中包含NULL值,   通常包含从右侧输入数据集中复制的值。

当Table2中没有行时,它将返回null。 (也许您可以使用CASE语句显示0,但我对界面不熟悉。)