Hi All, Just want to know that is it good practice to create multiple INNER JOIN on derived tables as I have written below or use a #temp table for all derived tables and use them into JOIN. Please advise .This below query is also very hard to understand what is going on .CREATE TABLE #Temp( NumPlayers INT, ModuleID INT, ClientId INT, ASF_Version VARCHAR(10), ASF_VersionHead INT);INSERT INTO #TempSELECT NumPlayers=Count( DISTINCT UserId), ModuleID, ClientId, ASF_Version, ASF_VersionHeadFROM (SELECT t.UserID, m.ModuleID, m.ClientID, t.UserTransNumber, t.EventNumber, t.GameData, CAST(t.GameData AS XML).value('(/X/@version)[1]', 'varchar(50)') AS ASF_Version, (SELECT value FROM fn_SplitDelimitedList(Cast(t.Gamedata AS XML).value('(/X/@version)[1]', 'varchar(50)'), '.') WHERE idx = 0) AS ASF_VersionHead FROM (SELECT ugd.UserID, Max(EventNumber) AS max_EventNumber, cg.ModuleID, cg.ClientID FROM dbo.tb_UserGameData ugd (nolock) JOIN ( SELECT UserID, ModuleID, ClientID, TransNumber FROM dbo.tb_CurrentGame (nolock)) cg ON cg.UserId = ugd.UserId AND cg.TransNumber = ugd.UserTransNumber GROUP BY ugd.UserID, cg.ModuleID, cg.ClientID) AS m JOIN dbo.tb_UserGameData AS t ON t.UserID = m.UserID AND t.EventNumber = m.max_EventNumber) AS x GROUP BY ModuleID, ClientId, ASF_Version, ASF_VersionHead HAVING ASF_VersionHead < 1000 ORDER BY ModuleID, ASF_VersionDELETE FROM #TempWHERE ModuleId IN (Select ModuleID from #temp where ASF_VersionHead > 130 )SELECT * FROM #TempIF(OBJECT_ID('tempdb..#Temp') Is Not Null)BEGIN DROP TABLE #TempEND
Vijay is here to learn something from you guys.