MySQL奇怪的奇怪错误...选择:错误1062(23000):键1重复输入'0'
-
29-09-2019 - |
题
这是有问题的查询(具有预期的含义:将所有实体与实体530配对的新表格,以及对成对的计数):
CREATE TEMPORARY TABLE paired (
entity_id INTEGER PRIMARY KEY,
numrels INTEGER
)
SELECT I.entity2_id, COUNT(I.relation_id) AS numrels
FROM pairs I
WHERE I.entity1_id = 530 AND I.entity2_id IS NOT NULL
GROUP BY I.entity2_id
;
我解释了错误消息:
ERROR 1062 (23000): Duplicate entry '0' for key 1
作为我违反主要钥匙的独特性的投诉。但是,我是 分组 通过该价值,应该确保独特性,对吗?然后我想尝试一下:
CREATE TEMPORARY TABLE paired (
entity_id INTEGER PRIMARY KEY,
numrels INTEGER
)
;
INSERT INTO paired
SELECT I.entity2_id, COUNT(I.relation_id) AS numrels
FROM pairs I
WHERE I.entity1_id = 530 AND I.entity2_id IS NOT NULL
GROUP BY I.entity2_id
;
令人惊讶的是,这无问题,尽管根据我的理解,这两者应该等效。
是什么赋予了?!?
以供参考:
mysql Ver 14.12 Distrib 5.0.82sp1, for redhat-linux-gnu (x86_64) using readline 5.1
解决方案
您的陈述不是等效的。 CREATE ... SELECT
创建您在 CREATE
该语句的一部分(即Entity_id和Numrels),另外,为该列的每一列创建列 SELECT
声明的一部分。您最终在新表中有四列。结果 SELECT
插入最后两列。其他列充满了其默认值,这导致违反了您的主要键的独特性。
也可以看看 http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html
不隶属于 StackOverflow