PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como é possível que a consulta SQL e ActiveRecord.find_by_sql retornem resultados diferentes?


Você tem resultado certo em ambos os exemplos.

Se você usar apenas count em select você sempre tem um número como resultado da consulta. Portanto, seu resultado do banco de dados é esperado.

No caso do Rails, você está tentando obter algum conjunto de registros por scope com count na instrução select. É esperado que tenha um conjunto vazio se você tiver count em sua consulta.

Experimente count_by_sql método http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class para obter o número de registros em vez do conjunto vazio.

E use-o sem escopo, mas com método de classe:
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