2013-07-11 50 views
0

我必須在如下鏈接一個Rails應用程序數據庫之間的連接在一起。使用更新和三個表

我想寫的人創建了一個CanDoThis列,並在學校規則的相關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子句條目表「人」

提示:沒有爲表「人」的條目,但它不能被引用從這部分查詢中。

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 

回答

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

+0

試過了,但後來它給了我一個'學校'已經指定了兩次。 (我不得不更換與學校的項目。) – mosquito242

+0

嗯,是的,我沒有看到這一點。你加入了PROJECTS,但是你的連接中的任何一列都沒有加入PROJECTS。這不好。我編輯了我的答案,但沒有看到你的模式,我就盲目了。 –

+0

你能看看我的編輯嗎?項目被學校所取代,人們仍然在那裏。我會嘗試更好地描述模式。 – mosquito242

0

@Bill可能是正確的。但是,僅供參考,如果您確實需要在SQL語句中多次引用表,請將其別名爲:

FROM school_rules sr1 
JOIN school_rules sr2 on ...