insert into 无法插入所选数据
insert into fails to insert selected data
过去几周,我一直致力于将 68GB table 分解为更规范的结构,直到今天,一切都进展顺利。
我正在尝试使用以下查询将 select 几列从大的 table 移到新的 table 中:
insert into [destination] (col1, col2, col3...)
select col1, col2, col3
From [source]
where companyID = [source].companyID
我收到消息,(60113678 行受影响),但是数据没有插入到目标中,源中的数据 table 也没有被改变,所以发生了什么受影响,为什么没有任何数据插入目标?
您似乎要执行的代码是:
update d
set col1 = s.col1,
col2 = s.col2,
col3 = s.col3
from destination d join
sources s
on s.companyID = s.companyId;
您编写的代码相当于:
insert into [destination] (col1, col2, col3...)
select s.col1, s.col2, s.col3
From [source]
where s.companyID = s.companyID;
where
等价于s.companyID is not null
。因此,您已将 source
中的所有 60,113,678 行插入到 destination
.
中的 new 行中
显然,故事的寓意之一是理解 insert
和 update
之间的区别。更重要的是,限定 查询中的所有列名。如果您这样做了,您的查询将在 source.CompanyID = destination.CompanyId
处失败——并且您不必弄清楚如何删除 60,113,678 行新行。
过去几周,我一直致力于将 68GB table 分解为更规范的结构,直到今天,一切都进展顺利。
我正在尝试使用以下查询将 select 几列从大的 table 移到新的 table 中:
insert into [destination] (col1, col2, col3...)
select col1, col2, col3
From [source]
where companyID = [source].companyID
我收到消息,(60113678 行受影响),但是数据没有插入到目标中,源中的数据 table 也没有被改变,所以发生了什么受影响,为什么没有任何数据插入目标?
您似乎要执行的代码是:
update d
set col1 = s.col1,
col2 = s.col2,
col3 = s.col3
from destination d join
sources s
on s.companyID = s.companyId;
您编写的代码相当于:
insert into [destination] (col1, col2, col3...)
select s.col1, s.col2, s.col3
From [source]
where s.companyID = s.companyID;
where
等价于s.companyID is not null
。因此,您已将 source
中的所有 60,113,678 行插入到 destination
.
显然,故事的寓意之一是理解 insert
和 update
之间的区别。更重要的是,限定 查询中的所有列名。如果您这样做了,您的查询将在 source.CompanyID = destination.CompanyId
处失败——并且您不必弄清楚如何删除 60,113,678 行新行。