Как изменить тип столбца и имеющиеся строки используя данные из другой таблицы?

Ссылка скопирована
1 ответ

У меня есть две таблицы: progress и subjects. В progress есть столбец subject типа text, а в таблице subjects есть 2 столбца: subject_id типа integer и subject типа text.
Как мне заменить тип столбца subject в таблице progress на integer, заодно изменив имеющиеся записи в этой таблице?
Пробовал такой вариант (переименовал subject на subject_id для дальнейшего присвоения ему внешнего ключа):

ALTER TABLE progress RENAME COLUMN subject TO subject_id;  ALTER TABLE progress ALTER COLUMN subject_id TYPE INTEGER USING ( SELECT subjects.subject_id  FROM subjects, progress WHERE progress.subject_id = subjects.subject );

ALTER TABLE progress RENAME COLUMN subject TO subject_id; ALTER TABLE progress ALTER COLUMN subject_id TYPE INTEGER USING ( SELECT subjects.subject_id FROM subjects, progress WHERE progress.subject_id = subjects.subject );

но это неправильный запрос:
ОШИБКА: нельзя использовать подзапрос в выражении преобразования
СТРОКА 1: ...ogress ALTER COLUMN subject_id TYPE INTEGER USING (SELECT su...

Дополнительно:

заменить тип столбца subject в таблице progress на integer

Это DDL.

изменив имеющиеся записи в этой таблице

А это DML.

Так что два запроса минимум. Реально - три. Создание нового поля, заполнение его значениями, удаление старого поля.

ALTER TABLE progress ADD COLUMN subject_id INT;  UPDATE progress p SET p.subject_id = s.subject_id    FROM subjects s  WHERE p.subject = s.subject;  -- ALTER TABLE progress DROP COLUMN subject;

ALTER TABLE progress ADD COLUMN subject_id INT; UPDATE progress p SET p.subject_id = s.subject_id FROM subjects s WHERE p.subject = s.subject; -- ALTER TABLE progress DROP COLUMN subject;

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

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

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

2. Создайте новый столбец в вашей таблице с нужным типом данных. Например, если вам нужно изменить тип столбца на INTEGER, используйте следующий SQL запрос:

ALTER TABLE your_table
ADD new_column INTEGER;

ALTER TABLE your_table ADD new_column INTEGER;

3. Теперь вам нужно обновить новый столбец данными из другой таблицы. Для этого используйте команду UPDATE с JOIN. Например, если у вас есть таблица `table1` с полем `id`, которое соответствует полю `id` в таблице `table2`, и вам нужно скопировать данные из столбца `value` таблицы `table2` в новый столбец `new_column` таблицы `table1`, выполните следующий запрос:

UPDATE table1
JOIN table2 ON table1.id = table2.id
SET table1.new_column = table2.value;

UPDATE table1 JOIN table2 ON table1.id = table2.id SET table1.new_column = table2.value;

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

ALTER TABLE your_table
DROP COLUMN old_column;

ALTER TABLE your_table DROP COLUMN old_column;

5. Не забудьте также обновить все запросы и код, которые могут использовать старый тип данных или старый столбец.

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно