sql >> Databáze >  >> RDS >> PostgreSQL

Jak je možné, že SQL dotaz a ActiveRecord.find_by_sql vracejí odlišné výsledky?

V obou příkladech máte správný výsledek.

Pokud používáte pouze count ve výběru jste vždy dostali číslo jako výsledek dotazu. Váš výsledek z databáze je tedy očekávaný.

V případě rails se snažíte získat nějakou sadu záznamů podle scope s count ve vybraném prohlášení. Pokud máte count, lze očekávat prázdnou sadu ve vašem dotazu.

Zkuste count_by_sql metoda http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class získat počet záznamů místo prázdné sady.

A použijte jej bez rozsahu, ale s metodou třídy:

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



  1. Konektor Python MySQL vrací byearray místo běžné hodnoty řetězce

  2. Chyba cílové tabulky není aktualizovatelná

  3. MySQL Vyberte KDE v daném pořadí

  4. Vložení podřízeného uzlu do sloupce XMLTYPE