所以我有一张桌子叫
layoffs
有 9 列。 我想创建一个名为
的表layoffs_copy
有 10 列。其中 9 个与
具有相同的数据layoffs
桌子。我想粘贴来自名为
的表的数据new_dates
到
第10栏layoffs_copy
以同样的顺序。我该怎么做?
到目前为止尝试过:
插入“layoffs_copy” 选择 * 来自裁员
想要添加最后一列数据,但收到“SQL错误或丢失数据库(表layoffs_copy有10列,但提供了9个值”错误
首先,表格不被认为是按任何顺序排列的,因此不存在“按相同顺序”的概念,除非指定了顺序(或以其他方式暗示,如下面的演示中的情况)。
否则,只需提取附加列并可能显式指定列即可。
所以类似的事情
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;
这会导致:-
coalesce
函数可以纠正此问题)。
演示假设列与添加的第 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;
会导致:-
即这些列已根据其顺序而不是其名称进行处理 因此 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;
结果是:-
即从 c1 列提取的值已放入 c1 列,依此类推。