使用sqlite3,可以说我有一个包含2000行的表。为此,我想添加一个新列。 我将此列作为2000个值的列表(作为实际的python列表)。如何将此列表添加为表格的列? 我已经看到命令ALTER_TABLE:
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
它似乎允许我提供列名和列数据类型,但是我应该在哪里添加该列的值?
我也看到了命令:
UPDATE table_name SET column_name=new_value
但是即使在这里,似乎也只有一种方法可以根据条件输入值。似乎不适合我准备好值的情况。
答案 0 :(得分:0)
使用ALTER TABLE ? ADD COLUMN ? ....
新列中的值将为null,或者,如果您使用DEFAULT the_default_value,则该列将设置为默认值。
如果可以轻松地从以前存在的列中导出值,则可以使用和UPDATE设置值。
例如,考虑以下简单示例:-
/* Create the original environment/data */
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, myfirstcolumn TEXT);
INSERT INTO mytable (myfirstcolumn) VALUES
('A'),('B'),('C'),('D'),
('A'),('B'),('C'),('D'),('E'),('F');
/* Display the data prior to adding the new column */
SELECT * FROM mytable;
/* Add the new column with default value of Z and then display the table*/
ALTER TABLE mytable ADD COLUMN mysecondcolumn TEXT DEFAULT 'Z'; /* sets all columns to z */
SELECT * FROM mytable;
/* Example of updating the data in the new column */
UPDATE mytable
SET mysecondcolumn =
CASE
WHEN myfirstcolumn = 'A' THEN 'ZA' /* IF myfirstcolumn is A then make mysecondcolumn ZA */
WHEN myfirstcolumn = 'B' THEN 'YB' /* IF myfirstcolumn is B then make mysecondcolumn YB */
WHEN myfirstcolumn = 'C' THEN 'XC' /* IF myfirstcolumn is C then make mysecondcolumn XC */
ELSE 'ZZ' /* IF myfirstcolumn is not A, B or C then make mysecondcolumn ZZ */
END
WHERE mysecondcolumn = 'Z' /* not really required as all rows will have Z */
;
/* Display end results */
SELECT * FROM mytable;
/* Clean up testing environment */
DROP TABLE IF EXISTS mytable;
/* Create the original environment/data */
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY, myfirstcolumn TEXT);
INSERT INTO mytable (myfirstcolumn) VALUES
('A'),('B'),('C'),('D'),
('A'),('B'),('C'),('D'),('E'),('F');
/* Display the data prior to adding the new column */
SELECT * FROM mytable;
/* Add the new column with default value of Z and then display the table*/
ALTER TABLE mytable ADD COLUMN mysecondcolumn TEXT DEFAULT 'Z'; /* sets all columns to z */
SELECT * FROM mytable;
/* Example of updating the data from a list containing first column value and value to use */
/* A temporary table build from the list */
DROP TABLE IF EXISTS myvalueslist;
CREATE TEMP TABLE myvalueslist (lookupvalue TEXT PRIMARY KEY, replacevalue TEXT);
INSERT INTO myvalueslist VALUES ('A','ZA'),('B','YB'),('C','XC'),('F','UF');
/* Do the update */
UPDATE mytable
SET mysecondcolumn = coalesce((SELECT replacevalue FROM myvalueslist WHERE myfirstcolumn = lookupvalue),'ZZ')
;
DROP TABLE IF EXISTS myvalueslist;
/* Display end results */
SELECT * FROM mytable;
/* Clean up testing environment */
DROP TABLE IF EXISTS mytable;
结果相似,唯一的不同是,当第一列为F(而不是默认的ZZ)时,第二个列将成为UF,这是附加条件:-