これは問題のあるクエリです (意図した意味: エンティティ 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
;
驚くべきことに、これは問題なく動作しますが、私の理解によれば、この 2 つは同等であるはずです。
何を与える?!?
参考のため:
mysql Ver 14.12 Distrib 5.0.82sp1, for redhat-linux-gnu (x86_64) using readline 5.1