2010-06-01 70 views
0

检索数据我有一个包含ID,顶层菜单&的parentId的表自己的孩子一样:MySql的来自同一个表

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

我想获取这些记录一些事情的结果数组必须像

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

我的查询语句,如:

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

mysql的说#1242 - 子查询返回多个1行

谁能解决呢? 谢谢..

回答

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

少许change.SELECT t1.name为 '父',t1.id为 '父ID',t2.name为 '儿童',t2.id为“孩子ID' 从我的表t1 INNER JOIN mytable t2 ON t1.id = t2.parentId – 2010-12-21 09:04:24

1

问题出现了,因为你的子查询返回不止一行。 解决方案是确保该子查询永远只能返回一行,或以确保如果返回多个

但这些真的不给你,你的表建议你要

结果也没关系
SELECT name AS Pname 
FROM myTbl 
WHERE id = (SELECT DISTINCT parentId 
       FROM myTbl 
       WHERE parentId = 1 
      ) 

OR

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