sql - SQLite创建表AS,但重命名列并保留原始数据类型,键?

标签 sql sqlite

SQLite目标

我想从一个联接(或一系列联接/子查询)创建一个新表。我希望新表保留原始表中的数据类型以及唯一索引。

另外,我想在此过程中重命名某些列。为了在SQLite中做到这一点,我觉得我需要执行以下步骤:



创建联接表作为临时表
用所需的列名称,数据类型和索引创建一个空的新表
将临时表插入新表。



问题:是否有更好或更简洁的方法来完成此任务?

以上过程的代码示例:

--create joined table as tmp
DROP TABLE if exists tmp;

CREATE TABLE tmp AS
SELECT 
    individual_contributions.cmte_id, 
    cmte_pty_affiliation, 
    name, 
    employer, 
    transaction_dt,
    transaction_amt,
    file_num,
    cand_id,
    sub_id 
    FROM individual_contributions LEFT JOIN committee_master 
    ON individual_contributions.cmte_id=committee_master.cmte_id
    WHERE employer LIKE "Goldman Sachs"
    GROUP BY sub_id;


--create new table with desired specs
DROP TABLE if exists cm_indiv;

CREATE TABLE cm_indiv (
    cmte_id TEXT NOT NULL,
    cmte_pty_affiliation TEXT,
    contributor_name TEXT,
    contributor_employer TEXT,
    contributor_transaction_dt TEXT,
    cand_id TEXT,
    transaction_amt TEXT,
    file_num NUMERIC,
    sub_id NUMERIC NOT NULL
);

CREATE UNIQUE INDEX idx_cm_indiv ON cm_indiv (sub_id);


--insert joined table into new table
INSERT INTO cm_indiv (
    cmte_id,
    cmte_pty_affiliation,
    contributor_name,
    contributor_employer,
    contributor_transaction_dt,
    cand_id,
    transaction_amt,
    file_num,
    sub_id
    )
SELECT 
    cmte_id,
    cmte_pty_affiliation,
    name,
    employer,
    transaction_dt,
    cand_id,
    transaction_amt,
    file_num,
    sub_id
    FROM tmp;

最佳答案

此CTAS使用SQL Fiddle(SQLite-WebSQL)为我工作。因此,在创建表时,请在如下所示的select语句中使用首选的列名。

create table tbl( id int);

insert into tbl values (1);

create table new_tbl 
as 
select id as new_id 
from tbl;

select new_id from new_tbl;

Result: 
new_id
1

关于sql - SQLite创建表AS,但重命名列并保留原始数据类型,键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49076009/

相关文章:

mysql - SELECT 后的保留关键字

android - 如何使用 Loader 更新单个 TextView

javascript - 如何使用 sequelize 从 sqlite 中的现有表中查询

java - getWritableDatabase 不起作用

python - 从 Oracle 调用 Python

php - 如何更改 SQL 表的日期(使用 phpmyadmin)?

mysql - SQL查询比较3个表并得到答案

MySQL,两个表显示来自两个表的信息

java - ActiveAndroid SQLite 异常 'No such table'

database - 仅当条目尚不存在时如何插入表中?