dans des rails, j'ai 2 tables:Comment sélectionner les enregistrements où un enfant n'existe pas
bans(ban_id, admin_id)
ban_reasons(ban_reason_id, ban_id, reason_id)
Je veux trouver tous les bans
pour un certain administration où il n'y a pas d'enregistrement dans le tableau ban_reasons
. Comment puis-je faire cela dans Rails sans boucler tous les enregistrements d'interdiction et filtrer tous ceux avec ban.ban_reasons.nil?
Je veux le faire (heureusement) en utilisant une seule instruction SQL.
Je dois juste faire: (Mais je veux faire le « rails » chemin)
SELECT bans.* FROM bans WHERE admin_id=1234 AND
ban_id NOT IN (SELECT ban_id FROM ban_reasons)
Y a-t-il une différence de performance entre les deux? Le second entraîne-t-il plus de requêtes? –
Oui, vous obtenez 1 requête de plus avec le second ... Je pense que le problème de performance dépend vraiment de la taille de votre DB. – Yannis
Je suppose que si le but est d'utiliser Rails quel que soit le coût alors la suggestion fonctionne, mais la performance va souffrir horriblement pour les grands ensembles de données. –