使用 ActiveRecord 在表上自连接

2024-03-05

我有一个名为的 ActiveRecordName其中包含各种名称Languages.

class Name < ActiveRecord::Base
  belongs_to :language

class Language < ActiveRecord::Base
  has_many :names

查找一种语言的名称很容易:

Language.find(1).names.find(whatever)

但我需要找到语言 1 和语言 2 具有相同名称的匹配对。在 SQL 中,这需要一个简单的自连接:

SELECT n1.id,n2.id FROM names AS n1, names AS n2
  WHERE n1.language_id=1 AND n2.language_id=2
    AND n1.normalized=n2.normalized AND n1.id != n2.id;

如何使用 ActiveRecord 进行这样的查询?请注意,我需要找到成对的名称(= 匹配的双方),而不仅仅是恰好与某些内容匹配的语言 1 中的名称列表。

如需奖励积分,请替换n1.normalized=n2.normalized with n1.normalized LIKE n2.normalized,因为该字段可能包含 SQL 通配符。

我也愿意接受以不同方式对数据进行建模的想法,但如果可以的话,我宁愿避免为每种语言使用单独的表。


尝试这个:

ids = [1,2]
Name.all(:select    => "names.id, n2.id AS id2",
         :joins     => "JOIN names AS n2 
                              ON n2.normalized = names.normalized AND 
                                 n2.language_id != names.language_id AND
                                 n2.language_id IN (%s)" % ids.join(','),
         :conditions => ["names.language_id IN (?)", ids]
).each do |name|
  p "id1 : #{name.id}"
  p "id2 : #{name.id2}"
end

PS:确保清理传递给连接条件的参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ActiveRecord 在表上自连接 的相关文章

随机推荐

  • 在 iOS 中将 CSV 上传(转换为电子表格)到 Google Drive?

    我已经生成 csv 文件来存储在本地目录路径中 我尝试将 csv 文件上传到谷歌驱动器 它工作正常 从 Google 云端硬盘打开 csv 文件 但电子表格中未显示预览 所以我想上传 csv 文件 将 csv 转换为电子表格 到谷歌驱动器
  • 扩展 EF DBContext

    我不确定我所问的是否是正确的方法 我有一个数据库优先模型 我想向其中添加某些常用方法 例如更新特定表的特定字段 我知道我可以通过使用适当的方法创建一个类来做到这一点 例如 public static class MyClass public
  • Eclipse 传入同步视图将传入的新文件显示为文件夹

    我希望可以在这里询问 Eclipse 中的奇怪行为 错误 当我将 Eclipse 同步视图与 Subclipse 结合使用时 我可以通过指向左侧的蓝色箭头很好地查看来自其他开发人员的所有传入文件 双击非常适合打开比较编辑器并查看所有更改 一
  • 如何在 C# 中将包含 HTML 的字符串渲染为图像?

    我正在开发一个为用户提供交互式反馈工具的网络应用程序 在此应用程序中 用户可以单击发送反馈按钮 该按钮会在当前网页上覆盖一个覆盖层 并允许他们拖动突出显示区域DIVs 强调某些领域 一旦他们提交反馈 整个页面的 HTML 就会通过 AJAX
  • 当生成正态分布的随机值时,定义范围的最有效方法是什么?

    仅供参考 随机 伪随机 A 当生成均匀随机数时 我可以指定一个范围 即 Math random Math random 10 5 generates numbers between 5 and 15 B 生成一组具有高斯式正态随机性版本的随
  • 从多个 CSV 文件中解析特定列/数据

    所以 最近我一直在使用 D3 js 解析 CSV 文件中的数据 在阅读 Scott Murray 的 交互式数据可视化 一本很棒的书 内容非常丰富 时 它解释了如何从 CSV 中的表中选择所有数据 解析CSV的代码如下所示 d3 text
  • 如何在 JavaScript 中访问 Grails 变量?

    我的 Grails 应用程序中有一个变量BootStrap groovy class BootStrap def init servletContext gt def testGrails 11 我想展示一个 JavaScriptalert
  • 使用 Maven 在 gitlab 中运行 (Docker) 测试容器

    我正在 gitlab ci cd 管道中工作 该管道使用 maven 和 docker 执行其所有命令 不包括部署 在本例中 我尝试运行集成测试 由 Maven 启动 它使用测试容器 用于 mysql 数据库 这些测试在本地运行时工作正常
  • 如何在 Vue 模板中的数组中使数据响应

  • 如何从 Java Web 应用程序将用户发推文到他/她的 Twitter 帐户

    你好 我想构建一个 java web 应用程序 我希望用户从我的 java 应用程序在他的帐户上发推文 现在 当我们考虑 twitter4J 时 它显示的代码正在使用我们自己在 twitter 开发门户上注册的应用程序 它不要求客户提供凭据
  • 使用命名导入在 Je​​st 测试中导入“常量”

    我有一个config and constants我的项目中的文件夹 位于src config test ts src constants index js分别 我已经设置了 Jest 来使用moduleNameMapper如下所示 这样我就
  • React 测试库不更新状态

    我的组件 import React from react const TestAsync gt const counter setCounter React useState 0 const delayCount gt setTimeout
  • 多个轴的单个图例[重复]

    这个问题在这里已经有答案了 我有以下示例代码 fig1 suptitle Test ax1 fig1 add subplot 221 ax1 plot x y1 color b label aVal ax2 ax1 twinx ax2 pl
  • Spring Security Kerberos 与基本的链接

    我有一个关于 Spring Security 的快速问题 我正在寻找一种解决方案 将安全性集成到我们的应用程序中 该应用程序提供 SSO 但也提供基本的 HTTP 我们系统的自动化部分之一只能支持基本身份验证 而我们却被困在其中 目前 我们
  • Android udp 多播与以太网

    大家好 我正在开发一个使用 udp 多播的项目 我有一台服务器通过以太网电缆发送多播 udp 数据包 我花了几周的时间阅读有关 android 上多播的所有帖子 但我仍然无法在我的 Asus Transformer Tablet 4 1 上
  • 如何在 Angular 中添加可重用的模式对话框?

    我是 Angular 新手并尝试实施这个解决方案 http adamalbrecht com 2013 12 12 creating a simple modal dialog directive in angular js 进入我的项目
  • 将 xml 响应映射到类?

    我不知道如何将某些 XML 表示为 C 类 有人对如何正确映射此 xml 有任何建议吗 下面是我的尝试
  • MySQL 根据条件求和多个列值

    我有以下架构 两个表 APPS ID bigint USERID Bigint USAGE START TIME datetime 1 12 2013 05 03 04 42 55 2 12 2013 05 12 06 22 45 3 12
  • C# 使用参数从内存加载 .NET 程序集

    我想知道如何从带有参数的字节数组启动 NET 程序集 我不想先将其写入磁盘 谁能给我一个关于如何做到这一点的例子吗 谢谢 这应该可以解决问题 Assembly program Assembly Load ASSEMBLY BYTES str
  • 使用 ActiveRecord 在表上自连接

    我有一个名为的 ActiveRecordName其中包含各种名称Languages class Name lt ActiveRecord Base belongs to language class Language lt ActiveRe