2015-04-13 3 views
0

У меня есть таблица mysql, как показано на рисунке ниже.Запрос Mysql для извлечения дочерних и родительских данных из одной таблицы

enter image description here

Теперь я хочу, чтобы запросить в этой таблице, так что я получаю следующие данные

enter image description here

Если нет родителя, то родитель должен быть заполнен как «NONE» или Empty. Как мне достичь этого запроса? Возможно ли это? Я обсуждал это с моим другом, но до сих пор не ответил. Любая помощь будет оценена по достоинству. Благодаря

ответ

2

Вы должны присоединиться к таблице с самими собой, используя LEFT JOIN, которая возвращает все строки из левой таблицы и строки из второй таблицы, которые соответствуют условию объединения:

Select 
    t1.ID, 
    t1.Name, 
    t2.Name AS Parent, 
    t1.Remarks 
From 
    yourtable t1 LEFT JOIN yourtable t2 
    ON t1.parent_id = t2.id 

Вы также можете используйте COALESCE(t2.name, 'NONE') AS Parent, чтобы вернуть строку NONE, когда нет совпадения.

+0

Thanks fthiella. Оно работает. – Redone

0

В MS SQL Server вы можете использовать CTE (Common Table Expression) - иерархический запрос для извлечения дочерних элементов дочернего и дочернего уровней. Но мой sql не поддерживает CTE.

Пожалуйста, обратитесь к вопросу this, который представляет, что MySQL не поддерживает CTE.
This answer поможет вам получить всех детей и детей этого ребенка. Вам нужно создать иерархический запрос.