createのmysql奇妙なエラー…選択:エラー1062(23000):キー1の複製エントリ '0' '

StackOverflow https://stackoverflow.com/questions/4304150

  •  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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top