获取两个表中都存在的所有记录
Get all records that exist in both the tables
下面是两个 tables 和一些示例数据:-
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 中有这 2 个模型。
现在在我的控制器中,如果它们的 ID 存在于媒体 table 中,我想获取上传中的所有记录,即来自上传 table 的 ID 为 3 和 6 的记录。
你和他们建立关系了吗?听上去你还没有(你真的应该),但如果你还没有那么试试:
ids = Media.all.ids
Upload.where(id: ids)
或作为一行
Upload.where(id: Media.all.ids)
这将 return 您上传 table 的所有记录,其 ID 存在于媒体 table 中。
你需要的是INNER JOIN,其中加入条件必须是table
的ID
Upload.joins("INNER JOIN medias ON media.id = uploads.id")
这将被翻译成:
"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"
编辑:
与MrYoshiji said in this 一样,Upload.where(id: Media.all)
也会做单次查询。
所以这两个选项选项都会return所有ids存在于媒体中的上传记录table
您可以在调用中进行子查询
我认为它应该看起来像这样
Upload.where(media_id: Media.all.map(&:id))
希望对你有帮助
下面是两个 tables 和一些示例数据:-
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 中有这 2 个模型。 现在在我的控制器中,如果它们的 ID 存在于媒体 table 中,我想获取上传中的所有记录,即来自上传 table 的 ID 为 3 和 6 的记录。
你和他们建立关系了吗?听上去你还没有(你真的应该),但如果你还没有那么试试:
ids = Media.all.ids
Upload.where(id: ids)
或作为一行
Upload.where(id: Media.all.ids)
这将 return 您上传 table 的所有记录,其 ID 存在于媒体 table 中。
你需要的是INNER JOIN,其中加入条件必须是table
的IDUpload.joins("INNER JOIN medias ON media.id = uploads.id")
这将被翻译成:
"SELECT `uploads`.* FROM `uploads` INNER JOIN media ON media.id = uploads.id"
编辑:
与MrYoshiji said in this Upload.where(id: Media.all)
也会做单次查询。
所以这两个选项选项都会return所有ids存在于媒体中的上传记录table
您可以在调用中进行子查询
我认为它应该看起来像这样
Upload.where(media_id: Media.all.map(&:id))
希望对你有帮助