我试图将多个表连接在一起,然后进行查询,但遇到了语法错误。
我有以下表格:
achievement_standards
id
description
terms
start_date
end_date
term_year_id
term_standards
term_id
achievement_standard_id我有以下方法:
def school_standards
@standards = @school.achievement_standards
.joins("LEFT OUTER JOIN term_standards ON achievement_standards.id = term_standards.achievement_standard_id")
.joins("LEFT OUTER JOIN terms ON terms.id = term_standards.term_id")
.where("term_standards.id IS ? OR (term_standards.term_id IS NOT ? AND terms.term_year_id IS NOT ?)", nil, nil, 100),
end我得到了一个syntax error at or near "100"。我加入这些桌子有什么问题吗?我正在努力获得不在term_standards表中或不在term_year 100中的成绩标准。
发布于 2019-01-24 22:57:19
查询的最后一部分是:
... AND terms.term_year_id IS NOT ?当给定param 100时,它将展开为:
... AND terms.term_year_id IS NOT 100这是无效的SQL:IS不是要将值与数字进行比较,因为您需要使用(In)相等运算符。你可能想:
... AND terms.term_year_id <> ?更一般地说,在大多数关系数据库管理系统中,IS仅用于与NULL ( IS NULL或IS NOT NULL)的连接。因此,基本上这种类型的参数化表达式只能与NULL参数一起使用(也就是说,RDBMS将在传递另一个值时引发错误):
term_standards.id IS ?
term_standards.term_id IS NOT ?根据您的目的,您不需要使用参数(在查询中显式地使用? ),或者您可能希望重构您的查询。
https://stackoverflow.com/questions/54356532
复制相似问题