【问题标题】:MySql Retrieve data from same tableMySql 从同一个表中检索数据
【发布时间】:2010-06-01 15:25:17
【问题描述】:

我有一张表,其中包含*菜单的 idnameparentId 及其子菜单,例如:

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

谁能解决? 谢谢..

【问题讨论】:

    标签: mysql mysql-error-1242


    【解决方案1】:
    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
    

    【讨论】:

    • 稍作改动。SELECT t1.name as 'Parent', t1.id as 'Parent Id', t2.name as 'Child', t2.id as 'Child Id' FROM mytable t1 INNER JOIN mytable t2 ON t1.id = t2.parentId
    【解决方案2】:

    出现问题是因为您的子查询返回多行。 解决方案是确保子查询只返回一行,或者确保它返回更多并不重要

    但这些并不能真正为您提供表格建议的结果

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

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

    【讨论】:

      最近更新 更多