Я думаю, это можно упростить до чего-то вроде этого (а также задействовать некоторые возможности «магии» проводника данных):
-- [params]
-- post_id :post_url
-- text :poll_name = poll
SELECT
pv.user_id,
po.html AS answer,
ue.email
FROM poll_options po
JOIN poll_votes pv ON po.id = pv.poll_option_id
JOIN polls p ON p.id = pv.poll_id
JOIN user_emails ue ON pv.user_id = ue.user_id AND ue.primary
WHERE p.post_id = :post_url
AND p.name = :poll_name
ORDER BY po.html
Тип параметра post_id позволяет вставить URL поста и автоматически получить его идентификатор (например, https://meta.discourse.org/t/export-a-list-of-user-emails-by-user-id/373768/5). Кроме того, большинство одиночных опросов в посте по умолчанию называются «poll», если только к тому же посту не добавлен второй опрос (или он не добавлен вручную), поэтому использование этого значения по умолчанию для :poll_name кажется удобным.
Также параметр user_id обладает некоторыми «магическими» свойствами: он отображает аватар и имя пользователя в виде ссылки на карточку профиля пользователя, а не просто обычный идентификатор. Это очень удобно для просмотра результатов «на сайте», хотя если вы планируете их экспортировать, вам нужно будет добавить таблицу users обратно, чтобы получить текстовую версию имени пользователя.