sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo es posible que la consulta SQL y ActiveRecord.find_by_sql devuelvan resultados diferentes?

Tienes el resultado correcto en ambos ejemplos.

Si usa solo count en seleccionar siempre obtuvo un número como resultado de la consulta. Entonces su resultado de la base de datos es esperable.

En el caso de Rails, intenta obtener un conjunto de registros por scope con count en declaración selecta. Es de esperar que tenga un conjunto vacío si tiene count en su consulta.

Prueba count_by_sql método http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class para obtener el número de registros en lugar de un conjunto vacío.

Y utilícelo sin alcance, pero con el método de clase:

def self.unverified_with_no_associations()
  self.count_by_sql("SELECT COUNT(DISTINCT(accounts.id, accounts.email)) FROM accounts WHERE level = 0 AND id NOT IN
            (SELECT DISTINCT(account_id) FROM verifications) AND id NOT IN 
            (SELECT DISTINCT(account_id) FROM positions) AND id NOT IN
            (SELECT DISTINCT(account_id) FROM edits) AND id NOT IN
            (SELECT DISTINCT(account_id) FROM posts) AND id NOT IN
            (SELECT DISTINCT(account_id) FROM reviews) AND id NOT IN
            (SELECT DISTINCT(sender_id) FROM kudos) AND id NOT IN
            (SELECT DISTINCT(account_id) FROM stacks WHERE account_id IS NOT NULL)")
end