2013-07-11 2 views
0

У меня есть база данных в приложении rails, которая связана следующим образом: Человек знает свою школу, которая знает, что это школьные правила.Используйте Update и объединяйтесь между тремя таблицами

Я пытаюсь написать миграцию, которая создает столбец CanDoThis в Person и заполняет его соответствующим столбцом 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; 

Пытался что-то новое - получил эту ошибку: Ошибка: недопустимая ссылку на ОТ-п запись для таблицы «людей»

ПОДСКАЗКА: Существует запись для таблицы «людей», но он не может ссылаться из этой части запроса.

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; 

EDIT: попытка рисования схемы

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, вероятно, прав. Но, FYI, если вам не нужно ссылаться на таблицу несколько раз в SQL заявления, вы должны псевдоним их так:

FROM school_rules sr1 
JOIN school_rules sr2 on ... 
Смежные вопросы