Я столкнулся с проблемой, на самом деле я использую запрос, подобный следующему:
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER() as VAL_RRN,
T1.FIELD1 AS FIELD1,
T1.FIELD2 AS FIELD2
FROM
MYTABLE1 AS T1) AS subquery
WHERE
VAL_RRN >= X
FETCH FIRST 10 ROWS ONLY
Этот запрос используется для одновременного отображения 10 результатов для пользователя, а переменная X
используется с системой прокрутки, чтобы позволить пользователю перемещаться по результатам.
Этот запрос работает хорошо (но я не знаю, является ли это лучшим способом сделать это).
В любом случаето, что мне действительно нужно сделать, это немного по-другому:
SELECT *
FROM
(SELECT
ROW_NUMBER() OVER() as VAL_RRN,
T1.FIELD1 AS FIELD1,
T1.FIELD2 AS FIELD2,
COALESCE((SELECT '1'
FROM MYTABLE1 AS T2
WHERE T1.FIELD1 = T2.FIELD2 FETCH FIRST ROW ONLY), '0') AS FIELD3 FROM MYTABLE1 AS T1) AS subquery
WHERE
VAL_RRN >= X
FETCH FIRST 10 ROWS ONLY
Предложение COALESCE
используется, чтобы узнать, есть ли в одной строке другие строки, ссылающиеся на него.
В MYTABLE1
FIELD1
является первичным ключом, а FIELD2
- внешним ключом, определенным с помощью:
CONSTRAINT CONSTRAINT_NAME FOREIGN KEY
(FIELD2) REFERENCES MYTABLE (FIELD1) ON DELETE SET NULL
, таблица MYTABLE
может иметь строку, которая ссылается на другие строки.
Но когда яЯ использую второй тип запроса, фактическое значение row_number() over()
является совершенно случайным, и я не знаю почему.Я пытался использовать VALUE()
вместо COALESCE()
, но, похоже, это не работает, есть идеи?