在ROW_NUMBER上使用INNER JOIN在SQL查询中添加条件

时间:2018-10-01 07:47:25

标签: sql sql-server inner-join row-number

我试图用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

1 个答案:

答案 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条记录时,您没有告知数据库您要使用哪个顺序。

此外,我还将您的隐式老式联接转换为现代的,显式的内部联接。这是现在编写联接的首选方式。