2010-01-04 6 views
2

J'ai trois tables.Requête sur Sql Rejoint

tblLink: (LinkId, LinkName, GroupId,, SubGroupId)
GroupId et SubGroupId sont la clé étrangère dans tblGroup et tblSubGroup
tblGroup: (GroupId, GroupName)
tblSubGroup: (SubGroupId, SubGroupName)

dans tblLink SubGroupId est autorisé, mais nul GroupId est obligatoire.

Je veux chercher LinkName, GroupName, SubGroupName pour chaque LinkId dans tblLink
J'ai écrit une requête

SELECT L.LinkName, G.GroupName, SG.SubGroupName DE L tblLink
gauche Inscrivez-vous
tblSubGroup SG
SUR
(L.SubGroupId = SG.SubGroupId)
INNER JOIN
tblGroup G
SUR
(L.GroupId = G.GroupId)

S'il n'y a pas sous-groupe pour certains LinkId Je veux montrer notexist au lieu de Null

Répondre

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

vous pouvez utiliser COALESCE pour le faire (au lieu de ISNULL), juste rend votre requête plus portable. – Technowise

+1

@Technowise: faites attention à la conversion de type de données implicite alors ... si SubGroupName est varchar (5) ou char (50), il pourrait être transtypé en varchar (8) pour correspondre au NotExist littéral. Avec ISNULL, il reste selon le type de données SubGroupName. SQL portable = changement de contrat? – gbn

+0

@Technowise, qu'entendez-vous par portable ici. Qu'est-ce que COALESCE, s'il vous plaît élaborer. –