Эквивалент ROW_NUMBER () в MySQL для вставки [дубликата]

Я пытаюсь преобразовать сценарии SQL, созданные в Microsoft SQL Server, для запуска с сервером ссылок на сценарии, которые можно использовать в процедурах SQL, сценарий, который я использую, использует

ROW_NUMBER() OVER(ORDER BY [FIELDS])

чтобы создать первичный ключ, который не зависит от автоматического увеличения, когда я пытаюсь сохранить код как процедуру, я получаю эту ошибку

ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL: проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '(ORDER BY [FIELDS])' в строке [LINENO]

очевидно, что ошибка говорит о том, что ROW_NUMBER OVER неверно, потому что я удалил бит OVER и получил сообщение об ошибке, говорящее, что ROW_NUMBER было undefined

везде, где я ищу, я не получаю ничего, кроме людей, задающих этот вопрос для оператора SELECT, а не для операторов INSERT, и в большинстве случаев ответы сводятся либо к получению количества строк, либо к получению последнего вставленного идентификатора, так что я могу использовать для создания те же данные, что и ROW_NUMBER () в Microsoft Server


person Memor-X    schedule 15.08.2012    source источник
comment
Это говорит о том, что функция OVER имеет недопустимые аргументы.   -  person Cole Johnson    schedule 15.08.2012
comment
@ColeJohnson: OVER в любом случае нет в MySQL, я проверил его поиском в Google и получил только ссылки на MSDN, даже если аргумент был правильным, он, вероятно, дал бы то же сообщение, что и ROW_NUMBER, или синтаксическая ошибка между двумя функциями ...... и да, сценарий работает в Microsoft SQL Server, потому что я запускал его в нем, поскольку он использует только сервер ссылок, я улучшаю работу сценария, перемещая его с использования сервера ссылок на фактическое использование в сам сервер   -  person Memor-X    schedule 15.08.2012
comment
Я пытаюсь ВСТАВИТЬ номер строки в таблицу, я не могу использовать INSERT INTO [TABLE] VALUES (@ rank + 1), потому что каждый раз я получаю 1, что недопустимо для первичного ключа, и я пробовали @row + = 1   -  person Memor-X    schedule 15.08.2012


Ответы (1)


К сожалению, в MySQL нет эквивалента ROW_NUMBER(), но вы все равно можете смоделировать его, создав простую переменную, которая содержит значение приращения для каждой строки.

Пример:

SET @rank=0;
SELECT   @rank := @rank+1 AS rank, fruit, amount
FROM     sales
ORDER BY amount DESC;
person John Woo    schedule 15.08.2012
comment
Он не возвращает номера строк, такие как 1,2,3 .... Он возвращается 1,2,9,11 ... Это не то, что я хочу - person Fahad Mullaji; 03.01.2016