Я пытаюсь выбрать повторяющиеся записи на основе совпадения трех столбцов. Список троек может быть очень длинным (1000), поэтому я хотел бы сделать его кратким.
Когда у меня есть список размером 10 (известные дубликаты), он соответствует только 2 (кажущимся случайным) и пропускает остальные 8. Я ожидал, что вернется 10 записей, но увидел только 2.
Я сузил его до этой проблемы:
Это возвращает одну запись. Ожидание 2:
select *
from ali
where (accountOid, dt, x) in
(
(64, '2014-03-01', 10000.0),
(64, '2014-04-23', -122.91)
)
Возвращает две записи, как и ожидалось:
select *
from ali
where (accountOid, dt, x) in ( (64, '2014-03-01', 10000.0) )
or (accountOid, dt, x) in ( (64, '2014-04-23', -122.91) )
Есть идеи, почему первый запрос возвращает только одну запись?
SHOW CREATE TABLE ali
)? Если вы используетеFLOAT
илиDOUBLE
для столбцаx
, это может привести к сбою сравнения на равенство, поскольку точное значение округляется неожиданным образом. Также укажите, какую именно версию MySQL вы используете. - person Bill Karwin   schedule 25.07.2014