Sqlite: Создать новую таблицу для результатов запроса и сохранить оригинальную схему

голоса
2

У меня есть следующий файл БД (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 IGNORE  INTO CARS VALUES(111,'Hyundai','White');
INSERT IGNORE  INTO CARS VALUES(222,'BMW','Black');
INSERT IGNORE  INTO CARS VALUES(333,'Toyota','Blue');
COMMIT;

Для того, чтобы присоединиться между двумя таблицами в двух различных базах данных, я придаю DB1.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, как раньше).

Мой вопрос: Как я могу сделать операции выше (приложите и запрос привести в новую таблицу) и до сих пор не теряет первоначальную информацию таблицы?

Задан 03/03/2016 в 11:36
пользователем
На других языках...                            


1 ответов

голоса
1

Это не имеет ничего общего с Прикреплением.

CREATE TABLE ... AS ... не хранит определение таблицы; он создает таблицу с минимальным количеством информации типа, чтобы иметь возможность хранить значение.

Если вы хотите иметь любое другое определение таблицы, вы должны создать таблицу вручную, а затем вставить данные с INSERT IGNORE INTO ... SELECT ... .

Ответил 03/03/2016 в 14:05
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more