Это проблемный запрос (с подразумеваемым значением: вытянуть все сущности в паре с сущностью 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
;
Удивительно, но это работает без проблем, хотя, насколько я понимаю, оба должны быть эквивалентны.
Что дает?!?
Для справки:
mysql Ver 14.12 Distrib 5.0.82sp1, for redhat-linux-gnu (x86_64) using readline 5.1