【问题标题】:Sqlite: Create new table for query results and keep the original schemaSqlite:为查询结果创建新表并保留原始架构
【发布时间】:2016-06-16 20:52:09
【问题描述】:

我有以下 db 文件 (DB1.db) 只包含一个表:

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE CARS (ID INT KEY NOT NULL, COMPANY CHAR(20) NOT NULL, COLOR CHAR(10) NOT NULL);
INSERT INTO "CARS" VALUES(111,'Hyundai','White');
INSERT INTO "CARS" VALUES(222,'BMW','Black');
INSERT INTO "CARS" VALUES(333,'Toyota','Blue');
COMMIT;

为了连接两个不同数据库中的两个表,我将 DB1.db(和另一个 db)附加到 DB2.db:

sqlite> ATTACH DATABASE 'DB1.db' AS 'db1' ;

“CARS”表信息如下所示:

sqlite> PRAGMA TABLE_INFO(CARS);
0|ID|INT KEY|1||0
1|COMPANY|CHAR(20)|1||0
2|COLOR|CHAR(10)|1||0

接下来也是最后,我想对附加的表运行查询并将结果保存在 DB2.db 的新表中:

sqlite> CREATE TABLE RES1 AS SELECT ID,COMPANY FROM CARS WHERE ID='333';

正如我所料,结果在一个新表中:

sqlite> SELECT * FROM RES1 ;
333|Toyota

但是新的表格信息看起来像:

sqlite> PRAGMA TABLE_INFO(RES1);
0|ID|INT|0||0
1|COMPANY|TEXT|0||0

如您所见,我丢失了 'COMPANY' 列类型 - 它不再是 'CHAR(20)' 并且该列可能是空的('NOT NULL' 是 0 而不是像以前那样的 1)。

我的问题: 如何进行上述操作(将结果附加并查询到新表中)并且仍然不丢失原始表信息?

【问题讨论】:

    标签: c database sqlite database-schema


    【解决方案1】:

    这与 ATTACHing 无关。

    CREATE TABLE ... AS ... 不保留表定义;它使用最少的类型信息创建一个表,以便能够存储值。

    如果你想有任何不同的表定义,你必须手动创建表,然后用INSERT INTO … SELECT …插入数据。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多