我有这个输入表:
CREATE TABLE `data` (
`id` INTEGER,
`a` INTEGER,
`b` INTEGER,
`c` TEXT, PRIMARY KEY(`id`) )
有了这些数据:
id a b c
-- - - -
1 1 4 a
2 1 5 a
3 1 6 b
4 2 4 a
5 1 5 c
由于我在此表上有许多其他列b
,c
,...以及大量冗余。例如,我们看到条目1
与条目4
相同,所以我想从这个平面表创建关系表,最终放弃data
以支持我的两个新表和创建名为view
data
目标是使用以下内容创建两个表bc
和a
:
a bc
-------- --
id id_bc id b c
-- ----- -- - -
1 1 1 4 a
2 2 2 5 a
3 3 3 6 b
4 1 4 4 c
5 4
通过以下方式轻松获取bc
:
CREATE TABLE bc AS SELECT DISTINCT b,c FROM data
但我不知道如何:
bc
列id
a
bc
醇>
答案 0 :(得分:1)
如果要自定义表bc
的创建,请执行此操作,而不是使用create table ... as select
。 (或者,将行标识符称为rowid
,而不是为其指定自定义名称。)
create table bc(
id integer primary key,
b integer,
c integer)
insert into bc(b,c) select distinct b,c from data
对于a
,由于您需要外键,因此无法使用create table ... as select
。
create table a(
id integer primary key,
id_bc integer,
foreign key (id_bc) references bc(id))
insert into a(id_bc)
select bc.id from data inner join bc
on data.b = bc.b and data.c = bc.c
在每个insert语句中省略主键(或指定null)将使用autoincrement。