ruby-on-rails – Ruby on Rails和Active Record – 查找在给定y
发布时间:2020-12-17 02:29:16 所属栏目:百科 来源:网络整理
导读:假设我有2个模型,Album和 Image,以及名为Album Image的连接模型(以及数据库中的3个相应表). 这些模型共享一个属于多人的关联 – 相册通过album_images有很多图像,反之亦然. Tl;博士版 如何查找未出现在给定相册中的每张图像? 长版 我正在寻找与以下SQL相当
假设我有2个模型,Album和
Image,以及名为Album
Image的连接模型(以及数据库中的3个相应表).
这些模型共享一个属于多人的关联 – 相册通过album_images有很多图像,反之亦然. Tl;博士版 如何查找未出现在给定相册中的每张图像? 长版 我正在寻找与以下SQL相当的东西: SELECT * FROM images WHERE 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |