链接将表连接到导轨

时间:2019-01-24 22:50:19

标签: sql ruby-on-rails

我试图将多个表连接在一起,然后进行查询,但是遇到语法错误。

我有下表:

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中的成就标准。

1 个答案:

答案 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仅与NULLIS NULLIS NOT NULL)结合使用。因此,基本上,这种类型的参数化表达式只能与NULL参数一起使用(也就是说,如果传递另一个值,则RDBMS将引发错误):

term_standards.id IS ?
term_standards.term_id IS NOT ?

根据您的目的,您不需要使用参数(在查询中显式地使用? NULL),或者您可能希望重构查询。