Я должен создать представление, которое автоматически добавляет виртуальный номер строки в результате. график здесь полностью случаен все, чего я хочу достигнуть, последний столбец, который будет создан динамично.
> +--------+------------+-----+
> | id | variety | num |
> +--------+------------+-----+
> | 234 | fuji | 1 |
> | 4356 | gala | 2 |
> | 343245 | limbertwig | 3 |
> | 224 | bing | 4 |
> | 4545 | chelan | 5 |
> | 3455 | navel | 6 |
> | 4534345| valencia | 7 |
> | 3451 | bartlett | 8 |
> | 3452 | bradford | 9 |
> +--------+------------+-----+
Запрос:
SELECT id,
variety,
SOMEFUNCTIONTHATWOULDGENERATETHIS() AS num
FROM mytable
Использовать:
SELECT t.id,
t.variety,
(SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
FROM TABLE t
Это не идеальный способ, так как запрос на числовое значение будет выполняться для каждой возвращаемой строки. Лучше было бы создать таблицу NUMBERS
с одним столбцом, содержащим число, начинающееся с одного, которое увеличивается до возмутительно большого числа, а затем объединить и сослаться на таблицу NUMBERS
таким же образом, как в примере переменной, который приведен ниже.
Вы можете определить переменную для получения функции psuedo number, потому что MySQL не имеет функций ранжирования:
SELECT t.id,
t.variety,
@rownum := @rownum + 1 AS num
FROM TABLE t,
(SELECT @rownum := 0) r
SELECT @rownum := 0
определяет переменную и устанавливает ее в ноль. r
является псевдонимом подзапроса/таблицы, потому что если вы не определите псевдоним для подзапроса, даже если вы его не используете, вы получите ошибку в MySQL.If you do, вы получите ошибку 1351, потому что нельзя использовать переменную в представлении из-за конструкции . Поведение ошибки/функции документировано здесь.
.Оракул имеет рядовую псевдоколонку. В MySQL, возможно, придется пойти некрасиво:
SELECT id,
variety,
1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
FROM tbl
Этот запрос с верхней части моей головы и непроверенный, так что возьмите его с зерном соли. Также предполагается, что вы хотите нумеровать строки по каким-то критериям (в данном случае id), а не по произвольной нумерации, показанной в вопросе
.