Я использую SQL-левое внутреннее соединение для запроса 4 таблиц. Одна из таблиц HtmlText
содержит как ModuleID
, так и Version
столбцы. Я хочу выполнить только MAX-версию каждого ModuleID
с определенного сайта или PortalID
. Вот то, что я попыталсяКак получить последние версии модулей в моем левом внутреннем соединении?
SELECT TBS.PortalID [PortalID], TBS.TabID [TabID], TBS.TabName [TabName],
TBS.TabPath [TabPath], HTM.Version[Version], TBM.ModuleID [ModuleID],
MDS.ModuleID[ModuleID], HTM.Content[Content]
FROM [MyDB].[dbo].[Tabs] TBS
Inner JOIN [MyDB].[dbo].[Modules] MDS
LEFT JOIN [MyDB].[dbo].[TabModules] TBM
LEFT JOIN [MyDB].[dbo].[HtmlText] HTM
ON HTM.[ModuleID] = TBM.[ModuleID]
ON MDS.[ModuleID] = TBM.[ModuleID]
ON TBS.[TabID] = TBM.[TabID]
WHERE TBS.[PortalID] = '0' AND DataLength(HTM.[Content]) <> 0
AND Version = (Select MAX([Version]) from [MyDB].[dbo].[HtmlText])
Но это только дает мне ModuleID
с наибольшим Version
, вместо MAX версии всех разная ModuleID
s
Переместите свою 'AND Version = ...' в состояние 'ON'. Он превращает «LEFT JOIN» в «INNER JOIN», включив его в предложение «WHERE». – Siyual
@Siyual Я попробовал ваше предложение и получил тот же результат – Skullomania
попробуйте изменить свой последний предикат на следующее: (Выберите MAX ([Version]) из [MyDB]. [Dbo]. [HtmlText], где ModuleId = HTM.ModuleId). Это получит максимальную версию для этого конкретного модуля. – SteveR