Ruby on rails 获取两个表中存在的所有记录
以下是两个表格,其中包含一些示例数据:-Ruby on rails 获取两个表中存在的所有记录,ruby-on-rails,ruby-on-rails-4,activerecord,rails-activerecord,rails-models,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:
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
我在rails中有这两个模型。
现在在我的控制器中,如果媒体表中存在id,我想获取上传中的所有记录,即id为3和6的上传表中的记录 你在他们之间建立了关系吗?听上去你还没有(你真的应该),但如果你还没有,那就试试:
ids = Media.all.ids
Upload.where(id: ids)
还是作为一行
Upload.where(id: Media.all.ids)
这将返回上载表中ID存在于媒体表中的所有记录 您需要的是连接条件必须是表ID的位置
Upload.joins("INNER JOIN medias ON media.id = uploads.id")
这将转化为:
"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"
编辑:
如本文所述,Upload.where(id:Media.all)
也将执行单个查询
因此这两个选项都将返回媒体表中ID存在的所有上传记录您可以在通话中进行子查询 我觉得应该是这样的
Upload.where(media\u id:media.all.map(&:id))
我希望这会有帮助共享id?因此,唯一要返回的记录是
id:6,file\u ref:abc5
,因为id 3
在表介质中不存在?您可以将**abc5**的值更改为5吗?或者您必须先将数字取出,然后在上传中存在findAll介质,但是文件_ref只在上传中可用,这正是我想要的。因此,我必须从uploads表中获取id为6和3的两条记录。Mark,这样做的缺点是,您要对数据库执行两个查询,一个查询媒体.all.id
,另一个查询上传.where
。对于内部连接,您只需要执行一个操作。Upload.where(id:Media.all)
将使用嵌套的SELECT medias.id[…]从媒体执行一个SQL查询
——但假设媒体上传关系仅由@MrYoshiji提到的id
的相等性定义,而没有id
,这是很奇怪的,它将执行单个查询