0

我在 Rails 应用程序中有一个数据库,链接如下:人知道它的学校,它知道它的学校规则。

我正在尝试编写一个迁移,在 Person 中创建一个 CanDoThis 列,并使用 School Rules 中的相关 IsThisAllowed 列填充它。这是我到目前为止所拥有的,但它给了我一个“表名“school_rules”指定了不止一次”错误。

UPDATE people
  SET people.canRunInHalls = school_rules.RunningInHallsIsAllowed 
  FROM school_rules
  JOIN school_rules on school_rules.school_id = schools.id 
  JOIN schools ON schools.id = people.school_id;

尝试了一些新的东西 - 得到这个错误:错误:对表“人”的 FROM 子句条目的无效引用

提示:表“people”有一个条目,但不能从这部分查询中引用它。

UPDATE people
  SET people.canRunInHalls = school_rules.RunningInHallsIsAllowed 
  FROM schools s
  JOIN school_rules on school_rules.school_id = s.id 
  JOIN schools ON schools.id = people.school_id;

编辑:尝试绘制架构

people
-------------
id
school_id
canRunInHalls


schools
_______________
id
people
school_rules_id


school_rules
_______________
id
school_id
RunningInHallsIsAllowed
4

2 回答 2

1

试试这个,使用更好的别名:

UPDATE p
  SET canRunInHalls = sr.RunningInHallsIsAllowed 
  FROM people p
  INNER JOIN school_rules sr ON p.school_id = sr.school_id;

由于您实际上不需要学校提供任何东西,因此我将其从声明中删除。

作为一个警告,我认为你会遇到多对多的麻烦。由于一所学校可以有许多规则,因此您不清楚哪个 school_rule 将适用于该人。您可能需要聚合 school_rules,或使用一些描述符将其限制为 1 行。

于 2013-07-11T19:32:45.860 回答
0

@Bill 可能是对的。但是,仅供参考,如果你确实需要在 SQL 语句中多次引用一个表,你应该像这样给它们起别名:

FROM school_rules sr1
JOIN school_rules sr2 on ...
于 2013-07-11T19:34:34.063 回答