Добавьте условие в SQL-запрос с INNER JOIN на ROW_NUMBER - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь написать INNER JOIN с ROW_NUMBER, но результат моего запроса не соответствует ожиданиям.

Я пытаюсь адаптировать этот запрос:

SELECT TOP 5 *
FROM Details, Application
WHERE Application.ID = Details.ApplicationID 
  AND Details.ApplicationID = 5

с ROW_NUMBER().

Я использовал этот пример Как выполнить внутреннее соединение по номеру строки на сервере sql

Теперь у меня есть это:

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 голосов
/ 01 октября 2018

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 записей.

Кроме того, я преобразовал ваше неявное соединение старой школы в современное явное, внутреннее соединение.Сейчас это предпочтительный способ написания объединений.

...