2010-08-08 2 views
4

Je suis là encore pour demander de l'aide concernant mon problème avec la vue que j'ai créée. Sur mes tblEvents il y a 8 enregistrements mais j'ai créé la vue qui n'affiche que 3 enregistrements. Je soupçonne que la vue ne lit pas une valeur nulle de mes tblEvents. Comment puis-je réparer ça? alt text http://img69.imageshack.us/img69/143/vwevents.pngcomment afficher les enregistrements de base de données même lorsque la cellule est nulle

alt text http://img43.imageshack.us/img43/8418/tblevents.png

SELECT dbo.tblUsers.UserID, 
      dbo.tblUsers.UserFirstName + ' UserLastName' AS Author, 
      dbo.tblUsers.UserLastName, 
      dbo.tblUsers.UserEmailAddress, 
      dbo.tblEvents.EventID, 
      dbo.tblEvents.EventName, 
      dbo.tblEvents.EventDescription, 
      dbo.tblEvents.EventVenue, 
      dbo.tblEvents.EventDate, 
      dbo.tblEvents.AddedBy, 
      dbo.tblEvents.Pending, 
      dbo.tblEvents.DateAdded, 
      dbo.tblEvents.DateEditted, 
      dbo.tblUsers.UserName 
    FROM dbo.tblUsers 
    JOIN dbo.tblEvents ON dbo.tblUsers.UserID = dbo.tblEvents.EdittedBy 
+0

Et si cela est une nouvelle table, s'il vous plaît fixer le champ DateEditted à nè correctement orthographié comme DateEdited. – HLGEM

Répondre

4

Je suppose que si le dossier n'a pas été modifié, vous souhaitez rejoindre la colonne AddedBy. Voir ci-dessous:

SELECT 
    u.UserID, 
    u.UserFirstName + ' UserLastName' AS Author, 
    u.UserLastName, 
    u.UserEmailAddress, 
    e.EventID, 
    e.EventName, 
    e.EventDescription, 
    e.EventVenue, 
    e.EventDate, 
    e.AddedBy, 
    e.Pending, 
    e.DateAdded, 
    e.DateEditted, 
    u.UserName 
FROM dbo.tblUsers u 
INNER JOIN dbo.tblEvents e ON u.UserID = ISNULL(e.EdittedBy, e.AddedBy) 
+0

Les fonctions dans les jointures doivent être évitées. Très mauvais artistes. – HLGEM

2

@ La réponse de RedFilter me semble bonne. Mais, s'il n'est pas approprié de rejoindre la colonne AddedBy, vous pouvez modifier la jointure en une jointure externe.

LEFT OUTER JOIN dbo.tblEvents ON dbo.tblUsers.UserID = dbo.tblEvents.EdittedBy 
0

utilisation LEFT OUTER JOIN

SELECT dbo.tblUsers.UserID, dbo.tblUsers.UserFirstName + 'USERLASTNAME' AS Auteur, dbo.tblUsers.UserLastName, dbo.tblUsers.UserEmailAddress, dbo.tblEvents.EventID, dbo.tblEvents.EventName, dbo.tblEvents.EventDescription, dbo.tblEvents.EventVenue, dbo.tblEvents.EventDate, dbo.tblEvents.AddedBy, dbo.tblEvent s.Pending, dbo.tblEvents.DateAdded, dbo.tblEvents.DateEditted, dbo.tblUsers.UserName DE dbo.tblEvents LEFT OUTER JOIN dbo.tblUsers SUR dbo.tblEvents.EdittedBy = dbo.tblUsers.UserID

0

Je vais proposer une solution légèrement différente basée sur une hypothèse légèrement différente. En supposant que vous voulez retourner les utilisateurs et tous les événements qu'ils ont soit ajouté ou modifié:

SELECT dbo.tblUsers.UserID, 
       dbo.tblUsers.UserFirstName + ' UserLastName' AS Author, 
       dbo.tblUsers.UserLastName, 
       dbo.tblUsers.UserEmailAddress, 
       dbo.tblEvents.EventID, 
       dbo.tblEvents.EventName, 
       dbo.tblEvents.EventDescription, 
       dbo.tblEvents.EventVenue, 
       dbo.tblEvents.EventDate, 
       dbo.tblEvents.AddedBy, 
       dbo.tblEvents.Pending, 
       dbo.tblEvents.DateAdded, 
       dbo.tblEvents.DateEditted, 
       dbo.tblUsers.UserName 
     FROM dbo.tblUsers 
     JOIN dbo.tblEvents ON dbo.tblUsers.UserID = dbo.tblEvents.AddedBy 
    UNION 
    SELECT dbo.tblUsers.UserID, 
       dbo.tblUsers.UserFirstName + ' UserLastName' AS Author, 
       dbo.tblUsers.UserLastName, 
       dbo.tblUsers.UserEmailAddress, 
       dbo.tblEvents.EventID, 
       dbo.tblEvents.EventName, 
       dbo.tblEvents.EventDescription, 
       dbo.tblEvents.EventVenue, 
       dbo.tblEvents.EventDate, 
       dbo.tblEvents.AddedBy, 
       dbo.tblEvents.Pending, 
       dbo.tblEvents.DateAdded, 
       dbo.tblEvents.DateEditted, 
       dbo.tblUsers.UserName 
     FROM dbo.tblUsers 
     JOIN dbo.tblEvents ON dbo.tblUsers.UserID = dbo.tblEvents.EdittedBy 
Questions connexes