MySql Получить данные из той же таблицы - PullRequest
0 голосов
/ 01 июня 2010

У меня есть таблица, которая содержит id , name , parentId меню верхнего уровня и их дочерних элементов, таких как:

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

2 голосов
/ 01 июня 2010
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
1 голос
/ 01 июня 2010

Проблема возникает из-за того, что ваш подзапрос возвращает более одной строки. Решение состоит в том, чтобы гарантировать, что подзапрос возвращает только одну строку, или убедиться, что не имеет значения, возвращает ли он больше

Но на самом деле это не дает вам того результата, который, как показывает ваша таблица, вы хотите

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