
这些模型共享一个属于多人的关联 – 相册通过album_images有很多图像,反之亦然.
Tl;博士版
如何查找未出现在给定相册中的每张图像?
长版
我正在寻找与以下sql相当的东西:
SELECT * FROM imagesWHERE NOT EXISTS ( SELECT * FROM album_images WHERE album_images.image_ID = images.ID AND album_images.album_ID = ?);
即,选择具有相同图像ID和给定相册的ID的album_images表中不存在行的每个图像.
但遗憾的是我不知道如何在Rails的查询语法中表达这一点.
解决方法 试试这个:选项1
Image.all(:conditions => ["images.ID NOT IN ( SELECT a.image_ID FROM album_images a WHERE a.album_ID = ?)",alb_ID])
这种方法比使用NOT EXISTS更好,因为此处的子查询结果由DB缓存.
选项2
使用left OUTER JOIN.
Image.all(:joins => "left OUTER JOIN album_images a ON a.album_ID = #{alb_ID} AND a.image_ID = images.ID",:conditions => "a.image_ID IS NulL") 选项3
如果每张专辑的图像数量有限,您不介意产生一个额外查询的成本:
conditions = ["ID NOT IN (?)",@album.album_images.map(&:image_ID)] unless @album.album_images.empty?Image.all(:conditions => conditions)总结
以上是内存溢出为你收集整理的ruby-on-rails – Ruby on Rails和Active Record – 查找在给定y中没有出现的所有x全部内容,希望文章能够帮你解决ruby-on-rails – Ruby on Rails和Active Record – 查找在给定y中没有出现的所有x所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)