【发布时间】:2025-12-15 09:10:01
【问题描述】:
我有不同语言的词义和翻译,这里是架构http://sqlfiddle.com/#!15/cba5e/2 我需要得到所有的感官,只有西班牙翻译(代码“es”),所以查询应该看起来像
SELECT *
FROM senses s
LEFT OUTER JOIN translations t ON
s.id = t.sense_id AND t.language_code = 'es';
我可以使用 eager_load/includes/.. 吗?
类似代码
Sense.includes(:translations).where(translations: { language_code: 'es' })
不起作用,因为它在 WHERE 子句中指定条件并生成类似
的查询SELECT *
FROM senses s
LEFT OUTER JOIN translations t ON s.id = t.sense_id
WHERE t.language_code = 'es';
而且我只对“es”翻译有感觉。但我需要所有感官 + 西班牙翻译,看看区别:http://sqlfiddle.com/#!15/cba5e/2 和 http://sqlfiddle.com/#!15/cba5e/3
来自https://www.postgresql.org/docs/current/static/queries-table-expressions.html: ON 子句中的限制在连接之前处理,而 WHERE 子句中的限制在连接之后
处理【问题讨论】:
-
我已经回答了下面的答案,请抽时间评估一下
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord