【问题标题】:Comparing fields of 2 table using Arel使用 Arel 比较 2 个表的字段
【发布时间】:2015-06-18 09:34:14
【问题描述】:

假设我有 2 个表加入,表 A 和表 B。

我想比较这些表的 2 个字段

table_A.project(Arel.star).join(table_B).where(table_A[:field_1].eq(table_B[:field_1])) 

【问题讨论】:

  • 你能解释一下你想要做什么,而不是“一些减法”吗?
  • 我编辑问题,清楚吗?提前谢谢你
  • 选择一个具体的事情并询问如何去做比给出一些“你想做的事情”的例子更有用,
  • 另外,您使用的是哪个 DBMS - 即 mysql、postgres、sqlite 等?
  • 我在 SQLite 中工作。我再次更新了我的问题。如果我可以使用等于运算符,让我们开始吧。

标签: sql ruby-on-rails arel


【解决方案1】:

要进行连接然后比较不同表中的字段,最好使用tablename.columname 格式。所以,

table_A.project(Arel.star).join(table_B).where("table_a.field1 = table_b.field2")    

你可以使用标准的比较运算符,例如<=, <, >, >= && <>(在sql中表示“不等于”)

编辑:请注意,我不知道“table_A.project(Arel.star)”产生了什么,这很神秘,所以据我所知,这可能会导致错误。

【讨论】:

  • table_A.project(Arel.star) 只是 Arel 的 SELECT * FROM table_a 的对应物。接下来是进一步的 AST 修改。
  • 非常感谢您的回复:)!现在如果我想在 where: where("table_a.field1 + '1 year' = table_b.field2") 里面做一个计算,经过一些修改,可以吗?
  • 看看这个stackoverflow.com/questions/21309204/… 和这个sqlite.org/lang_datefunc.html 我只是在几秒钟内用谷歌搜索(提示)看起来你可以做到.where("date(table_a.field1, "+1 years") = table_b.field2")
  • 非常感谢。对不起,如果我的问题很明显,但我是新来的。
  • 不用担心,这与其说是显而易见的(我认为这根本不是显而易见的),不如说是它的谷歌能力。但有时,如果你是新手,很难知道用谷歌搜索什么:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
相关资源
最近更新 更多