我试图用INNER JOIN
写一个ROW_NUMBER
,但是查询的结果不是我期望的。
我正在尝试修改此查询:
SELECT TOP 5 *
FROM Details, Application
WHERE Application.ID = Details.ApplicationID
AND Details.ApplicationID = 5
带有ROW_NUMBER()
。
我使用了这个示例How to do an inner join on row number in sql server
现在我有了这个:
SELECT TOP 5 *
FROM
(SELECT *, ROW_NUMBER() OVER(ORDER BY Details.ID) AS RowNum
FROM Details) A
JOIN
(SELECT *, ROW_NUMBER() OVER(ORDER BY Application.ID) AS RowNum
FROM Application) B ON A.RowNum = B.RowNum AND A.RowNum BETWEEN 1 AND 5
但是我正在尝试添加此条件
WHERE
Application.ID = Details.ApplicationID
AND Details.ApplicationID = 5
在我的新查询中,有人可以给我一些帮助吗?
我可以在查询中添加WHERE
吗?
PS:我正在使用SQL Server 2008
答案 0 :(得分:2)
MySQL直接类似于SQL Server的TOP
;它是LIMIT
,其行为方式相同:
SELECT *
FROM Details d
INNER JOIN Application a
ON a.ID = d.ApplicationID AND d.ApplicationID = 5
ORDER BY some_col
LIMIT 5;
请注意,在没有LIMIT
子句的情况下使用TOP
(或ORDER BY
)没有多大意义。这是因为在选择前5条记录时,您没有告知数据库您要使用哪个顺序。
此外,我还将您的隐式老式联接转换为现代的,显式的内部联接。这是现在编写联接的首选方式。