Почему в этом коде SQL не работает ALTER TABLE (добавление столбца)?

Предположим, у меня есть такая таблица (называемая 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)

Отметьте свой вопрос с помощью базы данных, которую вы используете.

Gordon Linoff 26.12.2020 16:01

Почему вы храните число в столбце varchar?

Jens 26.12.2020 16:03

Добро пожаловать в Stack Overflow! Как упоминал Гордон выше, не могли бы вы отредактировать вопрос, включив в него базу данных, которую вы используете, и ошибку, которую вы получаете? Я предполагаю, что ваш запрос должен быть разделен на два или даже три запроса. Операторы alter table и insert обычно должны быть разделены точкой с запятой. Оператор NOT NULL должен быть отдельным запросом после вставки.

Nikolay Shebanov 26.12.2020 16:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
1 094
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вам нужен сгенерированный столбец. Синтаксис варьируется в зависимости от базы данных, но часто он выглядит примерно так:

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)), это говорит о синтаксической ошибке. Вы знаете, как исправить?

user14892366 26.12.2020 16:41
SELECT — это одна команда. ALTER TABLE — еще одна команда. В большинстве баз данных они должны быть разделены точкой с запятой.
Gordon Linoff 26.12.2020 17:11

Другие вопросы по теме