2013-05-16 6 views
0

Что у меня есть:Что нового в sql, как вставить значения столбцов в новый столбец?

ALTER TABLE countryb 
ADD gnppercap real 
; 


INSERT INTO countryb (gnppercap) 
    SELECT gnp/population 
    FROM countryb 
; 

Я успешно создан столбец «gnppercap», теперь я хочу, чтобы заполнить значения в каждой строке с переменной. Новая переменная является продуктом gnp и 1/population, с переменными gnp и населением уже в таблице, которую я изменяю, countryb.

Вот ошибка:

ERROR: null value in column "code" violates not-null constraint 
SQL state: 23502 
Detail: Failing row contains (null, null, null, null, null, null, null, null, null, null, null, >null, null, null, null, 0.000263028). 

Я знаю, что таблица, countryb имеет массу непустых Варс в нем, так это то, что эти нули, я думаю. Я думал, что, поскольку я указал колонку, я вставляю значения, это не имело бы значения ...?

Я потерян. Помогите оценить!

+0

Вы добавили столбец. Он получил значение по умолчанию, которое оно должно. Теперь вы хотите изменить это значение в уже существующей строке. –

+0

Следовательно, использование «обновления» имеет смысл. Спасибо – Jefftopia

ответ

3

Вы хотите обновить таблицу, а не вставлять новую строку.

update countryb set gnppercap = gnp/population 

В стороне: вы, вероятно, не хотите хранить расчетное значение в отдельной колонке. Что произойдет, если вы обновите gnp или население? Ваш столбец gnppercap будет неточным.

+0

Ничего себе, это было слишком легко, не могу поверить, что я пропустил это. Другой вопрос, иногда значения 0 в числителе и знаменателе, я хочу установить равным нулю. Как я могу это сделать? – Jefftopia

+0

Это даст вам нулевой gnppercap. Ваш новый столбец, вероятно, по умолчанию является нулевым, поэтому нет необходимости повторно обновлять это значение до нуля. Я бы сделал это вместо этого: update countryb set gnppercap = gnp/population, где gnp <> 0 и население <> 0 – CharlesC

+0

Отлично, спасибо! – Jefftopia