2015-03-26 2 views
1

Я пытаюсь обновить таблицу при использовании соединения. Задача: Измените базу данных, чтобы показать, что Хелен Парту теперь научилась правильно играть в бубен.Обновить запрос, присоединившись к двум таблицам?

Вот моя попытка:

update MusicianInstrument 
set instrumentName = 'Tambourine',levelOfExpertise = 'Adequate' 
from MusicianInstrument join Musician 
on MusicianInstrument.musicianNo = Musician.musicianNo 
where musicianName = 'Helen Partou'; 

Однако я получаю сообщение об ошибке с FROM заявления ..... любой помощи ?!

Благодаря

+0

возможно дубликат [Oracle - оператор Update с внутренним соединением] (http://stackoverflow.com/questions/2446764/oracle-update-statement-with-inner-join) –

+0

Какая ошибка? И что происходит, когда вы пытаетесь использовать стратегию в ссылке; такая же ошибка или другая? – cphlewis

+0

Должно ли 'join' быть' inner join'? –

ответ

3

Вы хотите использовать WHERE EXISTS:

UPDATE MusicianInstrument mi 
    SET mi.instrumentName = 'Tambourine' 
    , mi.levelOfExpertise = 'Adequate' 
WHERE EXISTS (SELECT 1 FROM Musician m 
       WHERE m.musicianNo = mi.musicianNo 
        AND m.musicianName = 'Helen Partou'); 

На стороне записки, так как вы используете Oracle я бы рекомендовал не использовать верблюжий или headlessCamelCase для имен объектов.

3

Ваша задача изменить базу данных, так что, возможно, не только обновить таблицу, но и вставить значения, если они еще не установлены. Вы можете сделать это с помощью merge:

merge into MusicianInstrument i 
using (select * from Musician where musicianName = 'Helen Partou') m 
on (m.musicianNo = i.musicianNo 
    and i.instrumentName = 'Tambourine') 
when matched then update set levelOfExpertise = 'Adequate' 
when not matched then insert (i.musicianNo, i.instrumentName, i.levelOfExpertise) 
    values (m.musicianNo, 'Tambourine', 'Adequate') 
+0

Эй, я попробовал этот метод еще раз. Однако, например, если Хелен изначально не знала, как играть на инструменте «Тамбурин», запрос слияния должен вставлять только одну строку, но она вставляет 7 строк. Я понимаю? Как я могу это решить? – user3054588

+1

Вы правы, была ошибка в строках 2-3. Пожалуйста, проверьте сейчас. –

Смежные вопросы