2016-08-26 8 views
1

Ich habe eine SQL-Tabelle mit zwei Spalten, in denen man handeln wird, hat ein Elternteil und ein anderes wird ein Kind hat.wie zwei Tabellen verknüpfen

finden Sie bitte die untenstehende Tabelle

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

Hier muss ich die unten aus

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

Hier hat bekommen, was ich versuche

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

Aber ich bin nicht das richtige Ergebnis bekommen.

+0

welchem ​​Ergebnis Sie bekommen? Welches Ergebnis wolltest du bekommen? –

+2

Siehe Joins – Strawberry

+0

Sie benötigen einen Verweis auf die äußere Tabelle in der Unterabfrage. – jarlh

Antwort

5

eine Selbstverknüpfung Sie

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

Das GROUP BY ist in neueren MySQL-Versionen nicht gültig. (Es sei denn im Kompatibilitätsmodus.) – jarlh

+0

@Matt Entschuldigung, ich habe dies zunächst auf einem Handy beantwortet. Dann, als Sie kommentiert haben, habe ich MySQL Workbench hochgefahren und alles ist jetzt getestet und funktioniert korrekt. –

2

Die Unterabfrage korreliert werden muss, dh es einen Verweis auf die äußere Abfrage benötigt:

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

Allerdings wird ein left join wahrscheinlich besser Performance.

+1

brauchen 'koaleszieren' –

+0

@JuanCarlosOropeza, guter Punkt. Wird bearbeiten. – jarlh

+0

@JuanCarlosOropeza, warte mal, die Unterabfrage gibt 0 zurück, wenn keine Zeile gefunden wurde. – jarlh

0

Dies ist eine Variante einer Unterabfrage und eine Join:

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 
Verwandte Themen