MySQL seltsame Fehler in CREATE ... SELECT: ERROR 1062 (23000): Doppelte Eintrag '0' für die Taste 1

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

  •  29-09-2019
  •  | 
  •  

Frage

Dies ist die problematische Abfrage (mit der Bedeutung bestimmt: alle Entitäten mit Einheit 530 in eine neue Tabelle gepaart ziehen, mit der Zählung der Paare):

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
;

ich die Fehlermeldung interpretieren:

ERROR 1062 (23000): Duplicate entry '0' for key 1

als Beschwerde, dass ich Primärschlüssel der Einzigartigkeit bin zu verletzen. Ich bin aber Gruppierung von diesem Wert, der die Einzigartigkeit gewährleisten sollte, nicht wahr? Dann dachte ich, dies zu versuchen:

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
;

Erstaunlicherweise funktioniert dies ohne Probleme, obwohl, nach meinem Verständnis soll die zwei gleichwertig sein.

Was soll das?!?

Referenz:

mysql  Ver 14.12 Distrib 5.0.82sp1, for redhat-linux-gnu (x86_64) using readline 5.1
War es hilfreich?

Lösung

Ihre Aussagen sind nicht gleichwertig. CREATE ... SELECT erstellt die Spalten, die Sie in der CREATE Teil der Aussage erwähnen (das heißt, ENTITY_ID und numrels) und zusätzlich schafft Spalten für jede Spalte des SELECT Teil der Aussage. Sie enden mit vier Spalten in Ihrem neuen Tisch. Die Ergebnisse der SELECT werden in die letzten zwei Spalten eingefügt. Die anderen Spalten sind mit ihren Standardwerten gefüllt, die Ergebnisse in die Einzigartigkeit Ihrer Primärschlüssel verletzen.

Siehe auch http: //dev.mysql. com / doc / refman / 5.0 / de / create-table-select.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top