获取两个表中存在的所有记录

时间:2017-08-07 14:56:32

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord rails-models

下面是两张包含一些样本数据的表格: -

Uploads:  
id: 1 , file_ref:abc  
id: 2, file_ref: abc1  
id: 4, file_ref: abc3  
id: 5, file_ref: abc4  
id: 6, file_ref: abc5  
id: 7, file_ref: abc6  

media:  
id: 3, name: 'My Doc' , type: doc  
id: 6, name: 'My Img' , type: img  

我在轨道上有这两个型号。 现在在我的控制器中,如果他们的id存在于媒体表中,我希望获得上传中的所有记录,即上传表中带有ID 3和6的记录。

3 个答案:

答案 0 :(得分:0)

你们之间是否建立了关系?从你的声音中你没有(你真的应该),但如果你还没有尝试:

ids = Media.all.ids
Upload.where(id: ids)

或作为一行

Upload.where(id: Media.all.ids)

这将返回上传表中具有媒体表中存在的ID的所有记录。

答案 1 :(得分:0)

您需要的是INNER JOIN,其中连接条件必须是表格的ID

Upload.joins("INNER JOIN medias ON media.id = uploads.id")

这将被翻译为:

"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"

编辑:

正如MrYoshijicomment所述,Upload.where(id: Media.all)也会进行一次查询。

因此,两个选项选项都将返回媒体表中存在的所有上传记录

答案 2 :(得分:0)

您可以在通话中执行子查询

我认为它应该看起来像这样

Upload.where(media_id: Media.all.map(&:id))

我希望它有所帮助