如何仅使用SQLite语言方言将列从引用表移动到引用表?

如何仅使用SQLite语言方言将列从引用表移动到引用表?,sqlite,Sqlite,我在SQLite数据库中有以下表结构: CREATE TABLE A (id integer primary key, name text, room Integer); CREATE TABLE B (id integer primary key, idA integer not null, code blob, FOREIGN KEY(idA) REFERENCES A(id)); 对于A中的每个记录,B中有1到n条记录引用它。所需的表结构为: CREATE TAB

我在SQLite数据库中有以下表结构:

    CREATE TABLE A (id integer primary key, name text, room Integer);
    CREATE TABLE B (id integer primary key, idA integer not null, code blob, FOREIGN KEY(idA) REFERENCES A(id));
对于A中的每个记录,B中有1到n条记录引用它。所需的表结构为:

    CREATE TABLE A (id integer primary key, name text);
    CREATE TABLE B (id integer primary key, idA integer not null, code blob, room Integer, FOREIGN KEY(idA) REFERENCES A(id));
因此,我希望在不丢失数据的情况下将文件室列从A转换为B:重新创建没有文件室列的表A,删除A中的重复项,将文件室列添加到B,根据A记录室列(原始A表)中引用的值设置,并为B记录重新分配idA

是否可以只使用SQLite?如果可以,如何做到这一点,只使用SQLite

谢谢大家!

看一看

创建数据库:

CREATE TABLE A (id integer primary key, name text, room Integer);
CREATE TABLE B (id integer primary key, idA integer not null, code blob, FOREIGN KEY(idA) REFERENCES A(id));
填写一些测试数据:

insert into A (id, name, room) values (1, "azerty", 123) ;
insert into A (id, name, room) values (2, "querty", 456) ;

insert into B (id, idA, code) values (10, 1, "code 1") ;
insert into B (id, idA, code) values (15, 1, "code 1b") ;
insert into B (id, idA, code) values (20, 1, "code 1c") ;
insert into B (id, idA, code) values (25, 2, "code 2") ;
insert into B (id, idA, code) values (30, 3, "code 3") ;
将错误的表格布局复制到我们稍后将删除的表格:

alter table B rename to old_B ;
alter table A rename to old_A ;
根据正确的布局创建表:

CREATE TABLE A (id integer primary key, name text);
CREATE TABLE B (id integer primary key, idA integer not null, code blob, room Integer, FOREIGN KEY(idA) REFERENCES A(id));
将所选数据从旧文件复制到:

INSERT OR REPLACE INTO A ( id, name)
SELECT id, name FROM old_A ;
用一个内部连接填充B,使房间与正确的idA“对齐”:

INSERT OR REPLACE INTO B ( id, idA, code, room)
SELECT old_B.*, old_A.room FROM old_B INNER JOIN old_A ON old_B.idA = old_A.id  ;   
扔掉旧桌子

DROP TABLE old_A ;
DROP TABLE old_B ;

谢谢,但我的问题似乎不够准确。主要问题是,移动“room”列后,表中会出现具有相同“name”列值的重复项。主要问题是对3NF的规范化(旧表的名称和房间应该有唯一的约束,在移动名称列之后,新表的名称是唯一的)。在我的例子中,对于执行语句后的A记录(1,“Mozzy”,123)和(2,“Mozzy”,12),应该是两个Mozzy,但应该是一个,所有引用id为1和id为2的旧Mozzy的B记录应该只引用一个新Mozzy。我的意思是,类似这样的东西,但对于SQLite: