将JOIN限制为仅选择TOP 1的最佳方法

时间:2014-08-20 08:16:54

标签: sql sql-server stored-procedures join left-join

我对具有两个嵌套查询的过程的主要级别使用以下查询。

查询有效并选择了正确的数据,我唯一的问题是我只需要TOP 1基于JOIN的{​​{1}}记录。

我在Google上发现了一些关于这方面的帖子,方法截然不同,并且不确定哪一个是正确的。示例来源:How do I limit a LEFT JOIN to the 1st result in SQL Server?

我喜欢在左连接中包含内连接的方式,但不确定这是否有意义以及如何在此处应用它。 有人能告诉我什么是最好/最简单的方法以及如何在这里应用它?

我的SQL:

ORDER BY modTime desc

非常感谢提供任何帮助,蒂姆。

2 个答案:

答案 0 :(得分:2)

使用交叉申请或外部申请

SELECT  * 
FROM    MOC_Links A
        OUTER APPLY
        (SELECT TOP 1 *
         FROM   MOC_Log AS D
         WHERE  D.itemID = A.itemID
         ORDER BY D.modTime DESC) D

答案 1 :(得分:0)

试试这个,

select top A.itemID,
COALESCE(A.parentID, '999999'),
A.itemName,
A.linkRef,
A.sortID,
COUNT(*) OVER() AS volume,
D.lastUpdate,
CONVERT(VARCHAR(11), D.modTime, 106) AS modTime,
D.modBy,
'---' AS levelSub,(select top 1 ColumnName from Table)  FROM        MOC_Links A
LEFT JOIN   MOC_Log D
ON          D.itemID = A.itemID
WHERE       A.parentID = '1'
ORDER BY    A.itemName
FOR XML PATH('level1'), ELEMENTS, TYPE, ROOT('ranks')