-2

約 5 つのテーブルを結合し、すべての結果を表示するクエリがあります。レコードは Web アプリケーションで約 70000 エントリを持つ必要があることを示していますが、この結合を行うと、MSSQL 2008 では 51000 エントリしか表示されません。内部結合?結合機能の経験があまりないので、誰かがクエリを編集して、これらの 5 つのテーブルのすべてのエントリを表示することを望んでいました。これは専門のプログラマーにとって簡単な修正であることは承知しており、事前に時間と労力を費やしていただきありがとうございます。乾杯

既存のクエリ:

   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';
4

2 に答える 2

0

同じことを試してください。ただしOUTER JOIN、代わりに on を使用してください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';
于 2013-08-15T14:03:14.357 に答える
0

JOIN単独で使用されるキーワードのデフォルトINNER JOINは、交差に基づいて結合する です。

あなたのデータセットについてはよくわかりませんが、除外すべきではないと思われるデータを除外している場合は、より包括的な結合を使用する必要があります。JOINキーワードをOUTER JOINsに置き換えてみてください。

W3 Schoolsは、セマンティクスを学習しJOINてニーズに最も適したものを見つけ出すための優れたリソースであり、JOINより慣れるためにさまざまな種類のステートメントを自分で試すこともできます。

于 2013-08-15T14:08:59.917 に答える