2013-08-15 3 views
-2

У меня есть запрос, который объединяет около 5 таблиц и отображает все результаты. Записи показывают, что в веб-приложении должно быть около 70000 записей, но когда я делаю это, он отображает только 51000 записей в MSSQL 2008. Мне было интересно, как я могу манипулировать функциями соединения, чтобы отображать все записи 70000, возможно, добавляя внешнее соединение или внутреннее соединение? У меня не слишком много опыта работы с функцией соединения, и я надеялся, что кто-то отредактирует мой запрос, чтобы отобразить все записи в этих 5 таблицах. Я знаю, что это быстрое решение для опытного программиста, и я ценю время и усилия заранее! ПриветствияПрисоединиться к функции в SQL

Существующие запросы:

select SerialNum as [Serial Number],ts_sitename As Site,(case m.Scratched 
    when 0 then 'Live' 
    when 1 then 'Free' 
    END) as Status, Note as Comment, 
    SUBSTRING(cast(EffectiveDate as char), 1, 8) AS [Effective Date Added], 
    SUBSTRING(cast(EffectiveDate as char), 10, 6) AS [Effective Time Added], 
    SUBSTRING(cast(ScratchedDate as char), 1, 8) AS [Scratched Date], 
    SUBSTRING(cast(ScratchedDate as char), 10, 6) AS [Scratched Time], 
    SUBSTRING(cast(ChangedPurgeDate as char), 1, 8) AS [Purge Date], 
    SUBSTRING(cast(ChangedPurgeDate as char), 10, 6) AS [Purge Time], 
    fl_filename as Dataset, hs_hostname,UserCode 
    from (((((Media m join TheSites_tab s on m.SiteId = s.ts_sitenum) 
    join MediaGenT g on m.MediaId = g.mg_medianum) 
    join TheHosts_tab h on mg_hostnum = h.hs_hostnum) 
    join TheFiles_tab f on mg_filenum = f.fl_filenum) 
    join [User] u on mg_usernum = u.UserId) 
    join Note n on m.NoteId = n.NoteId 
    where Destroyed = '0'; 
+0

, не зная больше о ваших данных, можно только постулировать, что вы должны рассмотреть возможность использования OUTER JOIN ... Чтобы помочь вам, пожалуйста, укажите, какая таблица имеет 70000 строк (это носитель) или какой-либо другой? – amrith

+0

Это всего лишь предположение, но вы, вероятно, должны ПОЛНОСТЬЮ ПРИСОЕДИНИТЬ к таблице примечаний, поскольку я предполагаю, что Notes не обязательно существует в таблице Media. Использование LEFT JOIN в Note гарантирует, что вы получите все строки из Media, даже те, у которых нет заметки. – Dan

+0

@ Dan может отправить сообщение в качестве ответа, чтобы я мог его протестировать. –

ответ

0

Попробуйте то же самое, но использовать OUTER JOIN на вместо JOIN

select SerialNum as [Serial Number],ts_sitename As Site,(case m.Scratched 
    when 0 then 'Live' 
    when 1 then 'Free' 
    END) as Status, Note as Comment, 
    SUBSTRING(cast(EffectiveDate as char), 1, 8) AS [Effective Date Added], 
    SUBSTRING(cast(EffectiveDate as char), 10, 6) AS [Effective Time Added], 
    SUBSTRING(cast(ScratchedDate as char), 1, 8) AS [Scratched Date], 
    SUBSTRING(cast(ScratchedDate as char), 10, 6) AS [Scratched Time], 
    SUBSTRING(cast(ChangedPurgeDate as char), 1, 8) AS [Purge Date], 
    SUBSTRING(cast(ChangedPurgeDate as char), 10, 6) AS [Purge Time], 
    fl_filename as Dataset, hs_hostname,UserCode 
    from (((((Media m join TheSites_tab s on m.SiteId = s.ts_sitenum) 
    OUTER JOIN MediaGenT g on m.MediaId = g.mg_medianum) 
    OUTER JOIN TheHosts_tab h on mg_hostnum = h.hs_hostnum) 
    OUTER JOIN TheFiles_tab f on mg_filenum = f.fl_filenum) 
    OUTER JOIN [User] u on mg_usernum = u.UserId) 
    OUTER JOIN Note n on m.NoteId = n.NoteId 
    where Destroyed = '0'; 
+0

это дает мне ошибку в строке 13 Msg 156, уровень 15, состояние 1, строка 13 Неправильный синтаксис рядом с ключевым словом «JOIN». –

0

The JOIN ключевых слов, используемых только по умолчанию к INNER JOIN, который присоединяется на основе пересекаются.

Я мало знаю о вашем наборе данных, но если вы исключаете данные, которые вы не думаете, что вы должны исключать, вы должны использовать более инклюзивное соединение. Попробуйте заменить свои JOIN ключевые слова с помощью OUTER JOIN s.

W3 Schools является хорошим ресурсом для изучения JOIN семантики, чтобы выяснить, какой из них вам подходит лучше всего, а также позволяет попробовать различные виды JOIN заявления себя, чтобы получить более комфортным.