2013-03-21 84 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

相關問題