2013-03-21 77 views
2

我想表requests的一个字段的不同值插入表中的唯一领域pastmonth为什么在将DISTINCT值插入表时将出现“重复输入”错误?

CREATE TABLE `pastmonth` (
    `video_id` char(5) DEFAULT NULL, 
    PRIMARY KEY (`video_id`) 
); 

INSERT INTO pastmonth (video_id) 
SELECT DISTINCT (video_id) 
FROM requests 
WHERE exec_datetime >= NOW() - 60*24*60*60; 

但是我得到这个错误

Error Code: 1062. Duplicate entry 'abcde' for key 'PRIMARY' 

我不相信在表requests中存在abcde的值的重复条目,因为以下查询指示只有1个条目具有该条目,但如果因为我正在选择DISTINCT值而不应该出现问题。

SELECT COUNT(*) FROM requests WHERE video_id = 'abcde'; 

COUNT(*) 
1 

我有一个requests.video_id非唯一索引,但我认为这是不相关的我有问题。我可能有一个腐败的树树索引吗?

`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, 

但在新表中,它被定义为:

`video_id` char(5) 

编辑

CREATE TABLE `requests` (
    `request_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL, 
    `exec_datetime` datetime DEFAULT NULL, 
    PRIMARY KEY (`request_id`), 
    KEY `exec_datetime` (`exec_datetime`), 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 
+0

过去一个月空了吗?你显示创建表,但我不能告诉它是否在同一个执行中完成。 – 2013-03-21 03:33:52

+0

该表为空,但已创建。我按顺序依次执行这些命令。 – user784637 2013-03-21 03:34:37

+0

是的,你确定表PastMonth是空的吗?或者在过去一个月内您选择的不同和现有数据之间没有重复? – ljh 2013-03-21 03:35:49

回答

1

requests表,作为video_id场被确定c可能有所不同字符集和相应的校对。确保两个字段具有完全相同的字符集和归类。

+0

我的不好,都是'CHAR(5)'我错误地转录了数据类型的长度。我正确的请求表的DDL所以现在它准确地反映我的情况 – user784637 2013-03-21 03:57:59

+0

@ user784637转录?发生好的旧复制粘贴发生了什么?那么,有一个不同的字符集,你可以看看。 – 2013-03-21 03:59:23

+0

是的,它是排序规则...它是“请求”表的二进制文件,但我相信在创建新表时默认是不区分大小写的。 – user784637 2013-03-21 04:02:36