【问题标题】:Get sequel generated sql to generate field names without backticks获取sequel生成的sql生成不带反引号的字段名
【发布时间】:2016-06-17 12:46:03
【问题描述】:

我有以下用 SQL 编写的查询:

Select     * 
From       npt_articles 
Inner Join npt_authors 
Inner Join users 
Inner Join npt_teams 
Where      npt_teams.id In (1)

以及后续gem生成的以下sql:

SELECT     * 
FROM       `npt_articles` 
INNER JOIN `npt_authors` 
INNER JOIN `users` 
INNER JOIN `npt_teams` 
WHERE      ('npt_teams.id' IN (1))

第一个返回结果,第二个不返回,如果我删除反引号,那么第二个会生成与第一个相同的结果。

这是生成第二个 sql 的代码:

team_articles = user.npt_teams.to_a.inject({}) {|arts,team|
    arts.merge({ team.name =>
    NptArticle.join(:npt_authors).join(:users).join(:npt_teams).where('npt_teams.id' => [team.id]).to_a.uniq})
  }

如何生成不带反引号的查询?

【问题讨论】:

  • 你确定问题是反引号,而不是WHERE ('npt_teams.id' IN (1))?反引号不应该导致问题 - 但是单引号应该。
  • 好的,那么我如何获得续集以生成不带引号的内容呢?
  • 不能帮你,很遗憾。我对sequel一无所知。

标签: mysql sql ruby sequel ruby-1.8.7


【解决方案1】:

你应该试试这样的:

.where(:npt_teams__id => [team.id])

【讨论】:

  • 这行得通,将位更改为这个也行得通:.where("npt_teams.id IN (#{team.id})")。虽然它现在会导致脚本挂起,但它可以在 mysqlworkbench 中运行...
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多