MySQL在CREATE中出现奇怪的错误...SELECT : ERROR 1062 (23000): Duplicate entry '0' for key 1

标签 mysql mysql-error-1062

这是有问题的查询(其预期含义:将与实体 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

关于MySQL在CREATE中出现奇怪的错误...SELECT : ERROR 1062 (23000): Duplicate entry '0' for key 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304150/

相关文章:

mysql - 如何在Django中使用遗留数据库模仿request.user?

mysql - #1062 - key 'PRIMARY' 的重复条目

mysql插入错误1062

mysql - 在 Django 中加载固定装置时出现内容类型问题

Java MySQL - 命名管道连接在关闭时抛出警告

mysql - 将数据从 My Sql 导入到 Sql Server 的最简单方法

php - 如何复制MySQL字段?

php - 使用 Sql 查询显示变量的错误值

mysql - 在表之间复制数据时出现错误 1062 重复条目

java - JPA 内部运作。 MySQLIntegrityConstraintViolationException