grigor007: у вас был JOIN на 3 связи "многое ко многим", то есть СУБД приходится работать с n^4 строк. В моём варианте к каждой строке одной таблицы выбираются строки ещё из трёх таблиц, в итоге получается n(1+3n) строк, что намного меньше, чем в случае с JOINами. Если бы связь "многое ко многим" была одна, то JOIN был бы эффективен, и не было бы никаких дублей. Других способов избавиться от дублей придумать не могу.
Использование регулярного выражение для определения целого числа? Сударь знает толк в извращениях. Можно же сделать проще: ... where field = FLOOR(field)
grigor007: Вижу 2 связи "многое ко многим", количество записей на выходе будет порядка n^3, что не есть хорошо.
От каких именно дублей надо избавиться? Дублей полей events.id и вывести одну любую запись из projects и research_direction, которая соответствует events.id?