0

次のようにリンクされているレールアプリにデータベースがあります。人は、学校の規則を知っている学校を知っています。

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
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

@ビルはおそらく正しいです。ただし、参考までに、SQL ステートメントでテーブルを複数回参照する必要がある場合は、次のようにエイリアスを作成する必要があります。

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