Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Sql запрос для таблица которая связана сама с собой [D6, XP]


Mishenka ©   (2009-05-18 16:31:00) 

Есть таблица с полями ID, ModuleName, ParentID. Таблица описывает древовидную структуру, где в поле ParentID содержится ID родительской записи из той же таблицы. Нужно написать запрос, который бы по заданному параметру ID выводил поле ModuleName и тоже поле ModuleName для родительской записи.

Пишу так:
SELECT M.ModuleName, M2.ModuleName as ParentModuleName
FROM Modules M, Modules M2
WHERE (M.ParentID = M2.ID) AND (M.ID = :IDModule)

где IDModule это заданный параметр. Для дочерних записей всё работает нормально. Однако для родительских, тобишь у которых ParentID не ссылается ни на какую запись, в результате выводится пустой набор, а нужно чтоб выводилась одна запись с пустым значением поля ParentModuleName. Как изменить запрос, чтоб всё работало нормально???


Игорь Шевченко   (2009-05-19 14:53:00) [1]


> а нужно чтоб выводилась одна запись с пустым значением поля
> ParentModuleName. Как изменить запрос, чтоб всё работало
> нормально???


использовать OUTER JOIN ?


Mishenka   (2009-05-19 14:49:00) [2]

Всё заработало, спасибо!


Ega23   (2009-05-18 16:41:00) [3]

Select C.CatName, IsNull(C1.CatName, '') as ParCatName
from Mat$categories C left join Mat$categories C1 on (C.ParCatId=C1.CatID)


palva   (2009-05-18 16:39:00) [4]

Наверно, так:
SELECT M.ModuleName, M2.ModuleName as ParentModuleName
FROM Modules M
LEFT JOIN Modules M2 ON M.ParentID = M2.ID
WHERE M.ID = :IDModule


Наверх

Титульная страница Поиск, карта сайта Написать письмо