如何将表中某一列的数据添加到新表中?

问题描述 投票:0回答:1

所以我有一张桌子叫

layoffs 

有 9 列。 我想创建一个名为

的表
layoffs_copy 

有 10 列。其中 9 个与

具有相同的数据
layoffs

桌子。我想粘贴来自名为

的表的数据
new_dates 

第10栏
layoffs_copy

以同样的顺序。我该怎么做?

到目前为止尝试过:

插入“layoffs_copy” 选择 * 来自裁员

想要添加最后一列数据,但收到“SQL错误或丢失数据库(表layoffs_copy有10列,但提供了9个值”错误

sqlite
1个回答
0
投票

首先,表格不被认为是按任何顺序排列的,因此不存在“按相同顺序”的概念,除非指定了顺序(或以其他方式暗示,如下面的演示中的情况)。

否则,只需提取附加列并可能显式指定列即可。

所以类似的事情

INSERT INTO layoffs_copy SELECT *, (SELECT the_data FROM new_dates WHERE expression_to_suit) FROM layoffs;
  • 注意
    the_data
    expression_to_suit
    是描述性的而不是具体值。

考虑以下演示:-

DROP TABLE IF EXISTS layoffs;
DROP TABLE IF EXISTS layoffs_copy;
DROP TABLE IF EXISTS new_dates;
/* Create the 3 tables */
CREATE TABLE IF NOT EXISTS new_dates (old_date,new_date);
CREATE TABLE IF NOT EXISTS layoffs (c1,c2,c3,c4,c5,c6,c7,c8,c9);
CREATE TABLE IF NOT EXISTS layoffs_copy (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10);
/* Load some data into the new_dates table */
INSERT INTO new_dates VALUES ('a','A'),('b','B'),('c','C'),('d','D'),('e','E');
INSERT INTO layoffs VALUES 
    ('a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa','aaaaaaaaa'),
    ('b','bb','bbb','bbbb','bbbbb','bbbbbb','bbbbbbb','bbbbbbbb','bbbbbbbbb'),
    ('c','cc','ccc','cccc','ccccc','cccccc','ccccccc','cccccccc','ccccccccc'),
    ('a','xx','xxx','xxxx','xxxxx','xxxxxx','xxxxxxx','xxxxxxxx','xxxxxxxxx'),
    ('z','zz','zzz','zzzz','zzzzz','zzzzzz','zzzzzzz','zzzzzzzz','zzzzzzzzz')
;
INSERT INTO layoffs_copy SELECT 
    *,
    /* The additional data aka the 10th column */
    (SELECT new_date FROM new_dates WHERE new_dates.old_date = layoffs.c1) 
FROM layoffs;

/* Get the resultant data */
SELECT * FROM layoffs_copy;

/* Cleanup Demo Environment */
DROP TABLE IF EXISTS layoffs;
DROP TABLE IF EXISTS layoffs_copy;
DROP TABLE IF EXISTS new_dates;

这会导致:-

enter image description here

  • 因此,相应的(顺序)数据已从 new_dates 表中添加为列 c10,除非当 c1 列为 z 时没有相应的值,因此 c10 为空(
    coalesce
    函数可以纠正此问题)。
    • 各自的值/顺序是根据c1列与old_date列匹配,当然这是一个相对简单的例子
  • 因此,第一行输出是裁员表中的第一行加上 new_dates 表中相应的 new_date 值,依此类推。
    • 值得注意的是大部分数据由 x 组成的行(第 4 行),因为 c1 列的值为 a,因此值 A 是从 new_dates 表中获取的。

演示假设列与添加的第 10 个附加列类似。

关于显式列名,请考虑例如使用以下方式定义的名为 other_copy 的表:-

CREATE TABLE IF NOT EXISTS other_copy (c10,c8,c6,c4,c2,c1,c3,c5,c7,c9);

然后使用:-

INSERT INTO other_copy SELECT 
    *,
    /* The additional data aka the 10th column */
    (SELECT new_date FROM new_dates WHERE new_dates.old_date = layoffs.c1) 
FROM layoffs;

会导致:-

enter image description here

即这些列已根据其顺序而不是其名称进行处理 因此 C1 中的数据已放入 c10 列,依此类推。

但是,如果按照以下方式使用显式列名称:-

INSERT INTO other_copy (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) SELECT 
    c1,c2,c3,c4,c5,c6,c7,c8,c9,
    /* The additional data aka the 10th column */
    (SELECT new_date FROM new_dates WHERE new_dates.old_date = layoffs.c1) AS c10
FROM layoffs;

结果是:-

enter image description here

即从 c1 列提取的值已放入 c1 列,依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.