Postgres novato aquí.
Me pregunto si esta consulta está optimizada o no. Intenté unirme solo a los valores que son 100% necesarios y dejar todas las condiciones dinámicas en la cláusula WHERE. Vea abajo.
SELECT *
FROM
myapp_employees
JOIN myapp_users ON
myapp_users.user_id=myapp_employees.user_id
JOIN myapp_contacts_assoc ON
myapp_contacts_assoc.user_id=myapp_users.user_id
JOIN myapp_contacts ON
myapp_contacts.contact_id=myapp_contacts_assoc.contact_id
WHERE
myapp_contacts.value='test@gmail.com' AND
myapp_contacts.type=(1)::INT2 AND
myapp_contacts.is_primary=(1)::INT2 AND
myapp_contacts.expired_at IS NULL AND
myapp_employees.status=(1)::INT2 AND
myapp_users.status=(1)::INT2
LIMIT 1;
Nota: Para el contexto, este proceso está verificando si un usuario también es un empleado (privilegios elevados / tipo de usuario diferente).
De todos modos, ¿es este el camino correcto? ¿Debería JOIN ON contener más sentencias como, por ejemplo, comprobar expired_at IS NULL? ¿Por qué o por qué esto no tiene sentido?
SELECT version();
)