createの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
;
驚くべきことに、これは問題なく動作しますが、私の理解によれば、この2つは同等でなければなりません。
何が与えるの?!?
参考のために:
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
声明の一部。新しいテーブルに4つの列があります。の結果 SELECT
最後の2列に挿入されます。他の列はデフォルト値で満たされているため、主キーの一意性に違反します。
参照してください http://dev.mysql.com/doc/refman/5.0/en/create-table-select.html
所属していません StackOverflow