我试图将多个表连接在一起,然后进行查询,但是遇到语法错误。
我有下表:
inputValue.replace(/[^a-zA-Z0-9\!\.\#\$\^]/, "");
我有以下方法:
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
100中的成就标准。
答案 0 :(得分:1)
查询的最后一部分:
... AND terms.term_year_id IS NOT ?
给定参数100
时,它将扩展为:
... AND terms.term_year_id IS NOT 100
这是无效的SQL:IS
不能将值与数字进行比较,为此,您需要使用(in)等于运算符。您可能想要:
... AND terms.term_year_id <> ?
更笼统地说:在大多数RDBMS中,IS
仅与NULL
(IS NULL
或IS NOT NULL
)结合使用。因此,基本上,这种类型的参数化表达式只能与NULL
参数一起使用(也就是说,如果传递另一个值,则RDBMS将引发错误):
term_standards.id IS ?
term_standards.term_id IS NOT ?
根据您的目的,您不需要使用参数(在查询中显式地使用?
NULL
),或者您可能希望重构查询。