C'est la requête problématique (avec la signification prévue: tirer toutes les entités appariées avec l'entité 530 dans une nouvelle table, avec le nombre des paires):Erreur MySQL étrange dans CREATE ... SELECT: ERREUR 1062 (23000): Dupliquer l'entrée '0' pour la clé 1
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
;
J'interprète le message d'erreur:
ERROR 1062 (23000): Duplicate entry '0' for key 1
que la plainte que je viole l'unicité de la clé primaire. Cependant, je suis regroupant par cette valeur, ce qui devrait assurer l'unicité, non? Alors je pensais à essayer:
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
;
De façon surprenante, cela fonctionne sans aucun problème, même si, selon ma compréhension, les deux devraient être équivalents.
Qu'est-ce qui donne?!?
Pour référence:
mysql Ver 14.12 Distrib 5.0.82sp1, for redhat-linux-gnu (x86_64) using readline 5.1
Les valeurs d'identifiant sont-elles uniques? Pouvez-vous poster quelques exemples de données? –