Sql 从选择插入(Teradata)

Sql 从选择插入(Teradata),sql,teradata,Sql,Teradata,我有以下SQL语句: select cast (count(*) as bigint) from (SELECT oldtable.id,oldtable.day,newtable.newid from oldtable left outer join newtable on oldtable.day between newtable.FROM_DAY and newtable.TO_DAY and oldtable.id = newtable.id) a 结果是45亿 但当我这么说的

我有以下SQL语句:

select  cast (count(*) as bigint) from 
(SELECT  oldtable.id,oldtable.day,newtable.newid from oldtable
left outer join newtable on oldtable.day between newtable.FROM_DAY 
and newtable.TO_DAY and oldtable.id = newtable.id) a
结果是45亿

但当我这么说的时候:

INSERT  INTO AnotherTable
(id, day, newid)
SELECT  oldtable.id,oldtable.day,newtable.newid from oldtable
left outer join newtable on oldtable.day between newtable.FROM_DAY 
and newtable.TO_DAY and oldtable.id = newtable.id
它只插入3亿条记录(旧表包含45亿条记录,新表包含4.3亿条记录)

为什么?

另一个表的定义:

CREATE MULTISET TABLE AnotherTable ,NO FALLBACK ,
 NO BEFORE JOURNAL,
 NO AFTER JOURNAL,
 CHECKSUM = DEFAULT,
 DEFAULT MERGEBLOCKRATIO
 (  
  id INTEGER NOT NULL,
  day DATE FORMAT 'YYYY-MM-DD',  
   newid INTEGER NOT NULL
 )
 PRIMARY INDEX ( id) 
 PARTITION BY RANGE_N(day  BETWEEN DATE '2000-09-20' AND DATE '2030-02-15' EACH INTERVAL '1' DAY );

我做了如下检查:

 SELECT oldtable.id,oldtable.day,newtable.newid from oldtable 
 left outer join newtable on oldtable.day between newtable.FROM_DAY and newtable.TO_DAY
 and oldtable.id = newtable.id 
 where newtable.newid is null 

它产生了0条记录,因此根本不需要外部联接,我在这里只是用它来证明记录编号是不同的,但它不应该是插入数的来源

45亿减去3亿约为42亿

当您精确计算缺失行数时,结果是否为4.294.967.296

然后可能是由于“警告:6813内部计数器中的数字溢出”

从消息手册中剪切和粘贴:

6813内部计数器中存在数字溢出。返回的行数是返回的实际行数,模为2^32。 说明:当activitycount运行时,此警告消息在成功/OK包裹内发送 返回的行数超出了当前的最大限制(2^32-1)。 请求成功。 返回给用户的值是:(返回的实际行数)模2^32

注意:如果用户知道返回的实际行数不能超过2^33,则返回的实际行数可以按如下方式导出: 返回的实际行数=2^32+返回给用户的值


Dieter

您应该创建一个多集表格。它会成功的

CREATE MUTLISET TABLE ();
INSERT INTO ()
SELECT ()

上面的语法对我有用

您是否有可能对
newid
具有NOTNULL约束?由于
左外部联接,这可能为空。我做了以下检查:
从oldtable中选择oldtable.id,oldtable.day,newtable.newid左外部联接newtable on oldtable.day介于newtable.from_day和newtable.to_day之间,oldtable.id=newtable.id,其中newtable.newid为空
它产生了0条记录,所以根本不需要外部连接,我只是在这里使用它来演示记录编号是不同的,但它不应该允许您从数据库服务器接收任何错误消息?是否存在任何磁盘存储限制问题?如果继续失败,可以尝试从SQL select生成insert语句,然后运行insert脚本。无错误消息。磁盘存储已设置为足够。是否可以发布另一个表的表定义?我有预感,但想先看看表的定义。(如果可以的话,请发布所有表定义。)我不再在公司工作,所以我无法检查,但这似乎是最好的理由