我在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;
尝试了一些新内容 - 收到此错误:错误:对表“people”的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
答案 0 :(得分:1)
尝试使用更好的别名:
UPDATE p
SET canRunInHalls = sr.RunningInHallsIsAllowed
FROM people p
INNER JOIN school_rules sr ON p.school_id = sr.school_id;
由于您实际上并不需要学校的任何内容,我将其从声明中删除。
作为警告,我认为你会遇到很多人的麻烦。由于学校可以有很多规则,因此您不清楚哪个学校规则将适用于该人。您可能需要聚合school_rules,或使用一些描述符将其限制为1行。
答案 1 :(得分:0)
@Bill可能是对的。但是,仅供参考,如果你确实需要在SQL语句中多次引用一个表,你应该像这样对它们进行别名:
FROM school_rules sr1
JOIN school_rules sr2 on ...