2010-06-01 9 views
0

J'ai une table qui contient id, nom, parentId de niveau Top Menus & leurs enfants comme:MySql extraient des données de même table

-------------------------------------- 
    id | name | parentId 
-------------------------------------- 
    1  | Color |  0 
-------------------------------------- 
    2  | Flower |  0 
-------------------------------------- 
    3  | Red  |  1 
-------------------------------------- 
    4  | pink |  1 
-------------------------------------- 
    5  | Rose |  2 
-------------------------------------- 
    6  | Lily |  2 
-------------------------------------- 

et je veux aller chercher ces enregistrement certains chose que le tableau qui en résulte doit être comme

--------------------------------------------------------------- 
    id | Pname | parentId | child | childId 
--------------------------------------------------------------- 
    1  | Color |  1  | Red  | 3 
--------------------------------------------------------------- 
    2  | Color |  1  | Pink | 4 
--------------------------------------------------------------- 
    3  | Flower |  2  | Rose | 5 
--------------------------------------------------------------- 
    4  | Flower |  2  | Lily | 6 
--------------------------------------------------------------- 

ma requête était comme:

SELECT name AS Pname FROM myTbl WHERE id = (SELECT parentId FROM myTbl WHERE parentId = 1) 

mais mysql dire # 1242 - plus de sous-requête renvoie 1 rang

Quelqu'un pourrait-il résoudre? Merci ..

Répondre

2
SELECT t1.id, t1.name AS Pname, 
    t2.parentId, t2.name as child, t2.id as childId 
FROM myTbl t1 
INNER JOIN myTbl t2 on t1.id = t2.parentId 
+0

avec un peu de t1.name change.SELECT comme 'parent', t1.id comme 'Parent Id', t2.name comme 'enfant', t2.id comme ' Child Id ' DE mon table t1 INNER JOIN mytable t2 ON t1.id = t2.parentId –

1

Un problème survient parce que votre sous-requête renvoie plus d'une ligne. La solution est de faire en sorte que la sous-requête ne jamais retourne une ligne, ou pour vous assurer qu'il n'a pas d'importance si elle renvoie plus

Mais ceux-ci ne vous donne pas vraiment le résultat que votre table vous propose voulez

SELECT name AS Pname 
FROM myTbl 
WHERE id = (SELECT DISTINCT parentId 
       FROM myTbl 
       WHERE parentId = 1 
      ) 

OU

SELECT name AS Pname 
FROM myTbl 
WHERE id IN (SELECT DISTINCT parentId 
       FROM myTbl 
       WHERE parentId = 1 
      ) 
Questions connexes