2010-08-08 3 views
4

Я снова здесь, чтобы спросить о моей проблеме с представлением, которое я создал. На моих tblEvents там 8 записей, но я создал представление, на котором отображаются только 3 записи. Я подозреваю, что представление не читает нулевое значение из моих tblEvents. Как это исправить? alt text http://img69.imageshack.us/img69/143/vwevents.pngкак отображать записи базы данных, даже если ячейка равна нулю

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

И если это новая таблица, исправьте поле DateEditted пе правильно произносится как DateEdited. – HLGEM

ответ

4

Я предполагаю, что если запись не была отредактирована, то вы хотите присоединиться на AddedBy колонке. См. Ниже:

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

Следует избегать функций в соединениях. Очень плохие исполнители. – HLGEM

2

@ Ответ RedFilter звучит хорошо для меня. Но, если не подходит присоединиться к столбцу AddedBy, вы можете изменить соединение на внешнее соединение.

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

Использование LEFT OUTER JOIN

ВЫБОР dbo.tblUsers.UserID, dbo.tblUsers.UserFirstName + USERLASTNAME 'как автор, 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 ОТ dbo.tblEvents LEFT OUTER JOIN dbo.tblUsers ПО dbo.tblEvents.EdittedBy = dbo.tblUsers.UserID

0

Я собираюсь предложить немного другое решение, основанное на несколько другом предположении. Предполагая, что вы хотите, чтобы вернуть пользователям и все события, которые они либо добавлены или отредактированные:

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 
Смежные вопросы