Генерировать серийный номер в запросе mysql
У меня есть таблица: student_marks
marks
-----
44
55
64
98
76
Ожидаемый результат:
serial_number|marks
--------------------
1 | 44
2 | 55
3 | 64
4 | 98
5 | 76
Используя пользовательские переменные mysql, это можно сделать с помощью запроса:
set @a:=0;select @a:[email protected]+1 serial_number, marks from student_marks;
Есть ли способ достичь этого в msyql без использования пользовательских переменных?
Ответы
Ответ 1
Исходя из ваших причин не желать использовать переменные, определенные пользователем, так как вам нужно иметь 2 запроса, один для инициализации и один для его использования, вы можете использовать следующее:
SELECT @a:[email protected]+1 serial_number,
marks
FROM student_marks,
(SELECT @a:= 0) AS a;
Ответ 2
Лучший ответ на этот вопрос должен быть следующим: наилучшая практика
SET @count:=0;
SELECT (@count:[email protected]+1) AS serial_number,
marks
FROM student_marks
Ответ 3
Нет, нет. Но вы можете создать serial_number в стороне программы, а не на стороне базы данных.
Ответ 4
Почему бы вам не сделать это поле с автоматическим приращением?
http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
Ответ 5
У меня была таблица с столбцом (c5), содержащая число x, мне нужно выражение sql, которое повторяло ту же строку x чисел раз:
В моей таблице A содержится:
c1 c2 c3 c4 c5
16 1 2 16 3
16 1 2 17 2
16 1 2 18 1
и мне нужно:
c1 c2 c3 c4 c5 n
16 1 2 16 3 1
16 1 2 16 3 2
16 1 2 16 3 3
16 1 2 17 2 1
16 1 2 17 2 2
16 1 2 18 1 1
Я решил, что с выражением:
SELECT
c1, c2, c3, c4, c5, row_number AS n
FROM
(
SELECT
@curRow := @curRow + 1 AS row_number
FROM
tablea
JOIN (SELECT @curRow := 0) r
WHERE
@curRow < (
SELECT
max(field1)
FROM
tablea
)
) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;
Ответ 6
Нет, если у вас нет столбца, содержащего эти числа.
Ответ 7
Хотя очень поздно для ответа, генерируя последовательные идентификаторы без двух запросов и без использования объединений и без использования подпроса.
SELECT *, (@cnt := if(@cnt IS NULL, 0, @cnt) + 1) AS id FROM table_name;
Приветствия