2016-08-26 2 views
1

У меня есть одна таблица sql с двумя столбцами, в которой будет действовать родитель, а другая будет иметь ребенка.Как связать две таблицы

пожалуйста, найти в таблице ниже

Id name parent 
1 Chandan null 
2 raju 1 
3 anand 1 
4 gsfsgs null 
8 gggg 2 
9 ffff 2 

Здесь мне нужно, чтобы получить ниже из имеет

Id name  count 
1 Chandan 2 
2 raju  2 
3 anand  0 
4 gsfsgs  0 
8 gggg  0 
9 ffff  0 

Вот что я пытаюсь

select id, name, (select count(*) from table where parentid=id) as count 

Но я не получив правильный результат.

+0

Какой результат вы получаете? Какой результат вы хотели получить? –

+2

См. О присоединениях – Strawberry

+0

Вам нужна ссылка на внешнюю таблицу в подзапросе. – jarlh

ответ

5

ли автообъединение

SELECT t1.Id, 
     t1.name, 
     COUNT(t2.Id) AS count 
FROM yourTable t1 
LEFT JOIN yourTable t2 
    ON t1.Id = t2.parent 
GROUP BY t1.Id, 
     t1.name 
+0

Что GROUP BY недопустимо в новых версиях MySQL. (Если в режиме совместимости.) – jarlh

+0

@Matt Извините, я изначально ответил на это по мобильному телефону. Затем, когда вы прокомментировали, я запустил MySQL Workbench, и теперь все протестировано и работает правильно. –

2

необходим Суб-запрос коррелируют, т.е. необходима ссылка на внешний запрос:

select id, name, (select count(*) from table t2 where t2.parentid = t1.id) as count 
from table t1 

Однако left join, вероятно, будет лучше представление.

+1

необходимо 'coalesce' –

+0

@JuanCarlosOropeza, хороший пункт. Будет редактировать. – jarlh

+0

@JuanCarlosOropeza, подождите минуту, суб-запрос вернет 0, когда ни одна строка не найдена. – jarlh

0

Вот вариант с использованием подзапроса И объединения:

SELECT T.id, T.name, IFNULL(sub.cnt,0) 
FROM T 
LEFT JOIN 
(SELECT parent, COUNT(*) AS cnt 
FROM T 
GROUP BY parent) sub 
ON T.id = sub.parent 
Смежные вопросы