Предположим, у меня есть такая таблица (называемая numbers
).
A B
1 3
4 4
5 5
Я хочу создать новый столбец C
, состоящий из значений A / B
. т.е. что-то похожее:
A B C
1 3 0.33
4 4 1
5 5 1
Я пробую этот код, но он не работает. Кто-нибудь знает, почему?
ALTER TABLE numbers ADD C VARCHAR(50) NOT NULL INSERT INTO numbers (C) VALUES (A / B)
Почему вы храните число в столбце varchar?
Добро пожаловать в Stack Overflow! Как упоминал Гордон выше, не могли бы вы отредактировать вопрос, включив в него базу данных, которую вы используете, и ошибку, которую вы получаете? Я предполагаю, что ваш запрос должен быть разделен на два или даже три запроса. Операторы alter table
и insert
обычно должны быть разделены точкой с запятой. Оператор NOT NULL
должен быть отдельным запросом после вставки.
Похоже, вам нужен сгенерированный столбец. Синтаксис варьируется в зависимости от базы данных, но часто он выглядит примерно так:
ALTER TABLE numbers ADD C VARCHAR(50) GENERATED ALWAYS AS (A / B);
Почему вы выполняете арифметическую операцию, а затем сохраняете значение в виде строки, для меня загадка, но это разрешено.
Вот скрипт db<>, который использует MySQL.
Спасибо. Кстати, знаете ли вы, как включить несколько команд в один запрос? Например, я отредактировал эту таблицу раньше, чтобы исключить значения = 0 в столбце A с помощью SELECT * FROM numbers WHERE A != 0
, но если я попытаюсь объединить это с вашим кодом для выполнения в одном запросе (SELECT * FROM numbers WHERE A != 0 ALTER TABLE numbers ADD C VARCHAR(50) GENERATED ALWAYS AS (A / B)
), это говорит о синтаксической ошибке. Вы знаете, как исправить?
SELECT
— это одна команда. ALTER TABLE
— еще одна команда. В большинстве баз данных они должны быть разделены точкой с запятой.
Отметьте свой вопрос с помощью базы данных, которую вы используете.