sql >> データベース >  >> RDS >> PostgreSQL

SQLクエリとActiveRecord.find_by_sqlが異なる結果を返す可能性はどのようにありますか?

    どちらの例でも正しい結果が得られます。

    countのみを使用する場合 selectでは、クエリの結果として常に番号を取得します。したがって、データベースからの結果は期待できます。

    Railsの場合、scopeでレコードのセットを取得しようとしています countを使用 selectステートメントで。 countがある場合は、空のセットを取得することが期待されます クエリで。

    count_by_sqlをお試しください メソッド http://apidock.com/rails/ActiveRecord/Base/count_by_sql/class 空のセットではなくレコード数を取得します。

    そして、スコープなしで、クラスメソッドを使用して使用します:

    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. UnixタイムスタンプをPostgreSQLで日付/時刻値に変換する方法

    2. トリガーを作成するためのMySQLコードを動的に構築する

    3. PostgreSQLでmax(order_field)+1の行をトランザクションで挿入する方法

    4. foreachとfetchを使用したPHPPDO