【问题标题】:Syntax error in rails database queryRails 数据库查询中的语法错误
【发布时间】:2015-08-23 23:01:14
【问题描述】:

我在两个表(用户名:字符串组:整数)和关系(源:整数,目标:整数,值:整数)之间有一对多的关系。它们是相关的,因此 userid=relatioship.source。

我正在尝试从中获取一些 json,所以我写了:

 def self.including_relationships
    User.joins("INNER JOIN relationships ON users.id = relationships.source").select("users.name, users.group, relationships.source, relationships.target, relationships.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj| 

      obj['nodes'] << a.slice('name','group')
      obj['links'] << a.slice('source', 'target', 'value')

但是我得到了错误

SQLite3::SQLException: near "group": syntax error: SELECT users.name, users.group, relationships.source, relationships.target, relationships.value FROM "users" INNER JOIN relationships ON users.id = relationships.source

当我删除切片中的 users.group 和“组”时,它工作正常。

我检查了我的数据库架构,如下所示:

ActiveRecord::Schema.define(version: 20150603200530) do

  create_table "relationships", force: true do |t|
    t.integer "source"
    t.integer "target"
    t.integer "value"
  end

  create_table "users", force: true do |t|
    t.string  "name"
    t.integer "group"
  end

end

所有表格都按应有的方式填充。我无法弄清楚确切的语法错误是什么。

【问题讨论】:

    标签: mysql sql ruby-on-rails sqlite


    【解决方案1】:

    group 是保留字。

    要将其用作数据库对象,请在其周围使用反引号。

    您的部分陈述应修改如下:

    select("users.name, users.`group`, 
    

    文档

    【讨论】:

      【解决方案2】:

      Group 是保留关键字,不应将其用作列名。

      基本的误解是人们会将Group By 统称为保留的。 GroupBy 是两个不同的保留关键字。

      将列名 group 更改为其他名称。它会起作用的。 或者如果你想使用保留关键字,based on the documentation

      如果您想使用关键字作为名称,您需要引用它。那里 SQLite中引用关键字的四种方式:

      'keyword' 单引号中的关键字是字符串文字。
      "keyword" 双引号中的关键字是标识符。
      [关键字] A 方括号中的关键字是标识符。这不是 标准 SQL。 MS Access 和 SQL 使用此引用机制 服务器并包含在 SQLite 中以实现兼容性。
      `关键字` A 用重音符号(ASCII 代码 96)括起来的关键字是一个标识符。 这不是标准 SQL。 MySQL 使用这种引用机制,并且 为了兼容性,包含在 SQLite 中。


      更多信息请参考list of reserved keywords for sqlite

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多