Подзапрос на одной таблице - PullRequest
4 голосов
/ 08 июля 2011

Хорошо, поэтому у меня есть таблица

Tasks
--
TaskId  (unique autoinc primary)
ChildOf   (Contains task ID of parent, or 0 if top tier (no parent))

Мне нужно написать запрос, который выбирает все записи с ChildOf = 0 ... Просто верно?

Хорошо, но также необходимо иметьдругой столбец, возвращенный с результатами, который сообщает, сколько дочерних элементов имеет каждая задача ...

Таким образом, результат будет выглядеть следующим образом ...

TaskID ...  ChildOf ... countChildren
 37   ......  0   ....    3
 42   ......  0   ....    0
 99   ......  0   ....    1 

etc.... 

Я знаю, что два запроса мне нужнывот так, но нужно как-то их объединить ...

Select TaskId as ParentTaskId, ChildOf from Tasks where ChildOf = 0

и

Select count(TaskId) from Tasks where ChildOf = ParentTaskId

ПРИМЕЧАНИЕ: есть только 2 уровня .. Родитель и ребенок ... Никаких внуков!Надеюсь, это сделает его немного менее сложным.

Любая помощь очень ценится.Спасибо за всю помощь!

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Что-то вроде этого должно сделать это:

SELECT TaskId as ParentTaskId, ChildOf , 
 (SELECT count(t2.TaskId) 
  FROM Tasks t2
  WHERE t2.ChildOf = t.TaskId) as CountChildren
FROM Tasks t 
WHERE t.ChildOf = 0
0 голосов
/ 08 июля 2011

Попробуйте это:

SELECT T1.TaskID, T1.ChildOf, count(*) from 
  Tasks as T1 join Tasks as T2 on T1.TaskID = T2.ChildOf 
  WHERE T1.ChildOf = 0 
    GROUP BY (T1.TaskID)
...