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