2010-01-04 2 views
2

У меня есть три таблицы.Query on Sql Joins

tblLink: (LinkId, LINKNAME, GroupID,, SubGroupId)
GroupID и SubGroupId является внешним ключом в tblGroup и tblSubGroup
tblGroup: (GroupID, GroupName)
tblSubGroup: (SubGroupId, SubGroupName)

in tblLink SubGroupId разрешено Null, но GroupId является обязательным.

Я хочу принести LINKNAME, GroupName, SubGroupName для каждого LinkId в tblLink
Я написал запрос

ВЫБРАТЬ L.LinkName, G.GroupName, SG.SubGroupName ОТ tblLink L
Соединение слева
tblSubGroup SG
ON
(L.SubGroupId = SG.SubGroupId)
Inner Регистрация
tblGroup G
ON
(L.GroupId = G.GroupId)

Если нет подгруппы для некоторого LinkId Я хочу, чтобы показать NotExist вместо Null

ответ

4
SELECT 
    L.LinkName, G.GroupName, 
    ISNULL(SG.SubGroupName, 'NotExist') AS SubGroupName 
FROM 
    Link L 
.... 
+3

Вы можете использовать COALESCE для этого (вместо ISNULL), просто делает ваш запрос более переносимым. – Technowise

+1

@Technowise: остерегайтесь неявного преобразования типа данных, тогда ... если SubGroupName является varchar (5) или char (50), его можно передать в varchar (8), чтобы соответствовать литералу NotExist. С ISNULL он остается в зависимости от типа данных SubGroupName. Portable SQL = изменение контракта? – gbn

+0

@Technowise, что вы подразумеваете под переносным здесь. Что такое COALESCE, пожалуйста, проработайте. –