SQLite Количество между двумя таблицами - PullRequest
0 голосов
/ 28 января 2019

Я не уверен, возможно ли это в SQLite (для приложения для Android), так как это может потребовать и INNER JOIN или OUTER JOIN, которые sqlite doea не поддерживает.

Я пытаюсь вывести значения 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 голосов
/ 28 января 2019

Вы можете получить нужное значение путем агрегирования в подзапросе:

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

См. демо Другое решение с группой:

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

См. Демоверсию

0 голосов
/ 28 января 2019

Вы можете сделать это с помощью LEFT JOIN в sqlite.Просто измените JOIN на LEFT JOIN.Начиная с документа :

Если оператор соединения представляет собой «LEFT JOIN» или «LEFT OUTER JOIN», то после применения условий фильтрации ON или USING,дополнительная строка добавляется к выходным данным для каждой строки в исходном левом входном наборе данных, что вообще не соответствует строкам в наборе составных данных (если есть).Добавленные строки содержат значения NULL в столбцах, которые обычно содержат значения, скопированные из правого входного набора данных.

Он вернет значение NULL, если в таблице нет строк.(Возможно, вы могли бы использовать оператор CASE для отображения 0, но я не знаком с интерфейсом).

...