2010-08-07 5 views
4

Quelle est la méthode de rails pour soustraire un résultat de requête d'un autre? Une base de données exemple spécifique de SQL serait:activerecord équivalent à SQL 'minus'

SELECT Date FROM Store_Information 
MINUS 
SELECT Date FROM Internet_Sales 
+2

IIRC: 'MINUS' est Oracle; 'EXCEPT' est ANSI –

Répondre

3

Je vais jeter ce dans le mélange - pas une solution, mais pourrait aider les progrès:

mieux que je peux penser est d'utiliser NOT IN:

StoreInformation.where('date NOT IN (?)', InternetSale.all) 

C'est Rails 3 - Rails 2 serait:

StoreInformation.all(:conditions => ['date NOT IN(?)', InternetSale.all]) 

Mais ces deux seront d'abord sélectionner tout d'internet_sales; ce que vous voulez vraiment, c'est une requête imbriquée pour faire le tout dans le moteur de base de données. Pour cela, je pense que vous devrez entrer dans find_by_sql et juste donner une requête imbriquée.

De toute évidence, cela suppose que vous utilisez MySQL! HTH.

+0

Je pense que la question intéressante ici concerne la soustraction d'un ensemble ActiveRecord d'un autre - post-requête –