【发布时间】:2018-03-02 19:23:23
【问题描述】:
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;
【问题讨论】: