2015-08-21 4 views
0

Так что я пытаюсь обновить значение в таблице на основе значения другой строки в той же таблице. Используя приведенную ниже таблицу в качестве примера:Обновить строку на основе значения в другой строке

Student #  Subject  Chosen  Required 
001   Maths   N   N 
054   Maths   N   N 
002   History  N   N 
001   Geography  Y   N 
001   Physics  N   N 
054   History  Y   N 
002   Physics  Y   N 

Я хочу, чтобы заявление, которое позволило бы мне изменить столбец «необходимый» для студента на основе были ли выбраны они другой предмет: например, Если ученик 001 выбрал математику, ему не потребовалось бы заниматься физикой.

Так это будет выглядеть примерно так:

Update dbo.Subject_Choices 
Set Required = 'Y' 
Where Subject = 'Physics' 
AND 
{I have literally no idea how to continue this syntax, but it would have to check whether the required Field for Maths for the same student = N} 

Любые мысли?

+2

Вы используете Oracle или SQL Server? 'dbo' кажется необычным именем схемы в Oracle. –

+0

Немного рискованно хранить данные, «вычисленные» из других столбцов, например, потому что, если класс математики удаляется для ученика, вы всегда должны помнить об обновлении требуемого столбца для класса физики. Чтобы избежать несогласованности данных, вы можете использовать триггеры. – jarlh

ответ

4

Я думаю, что это должно работать для вас (измененная мой запрос mkae уверен, что это Oracle совместимый):

UPDATE dbo.Subject_Choices SC 
SET Required = 'Y' 
WHERE Subject = 'Physics' 
    AND EXISTS (SELECT 1 FROM dbo.Subject_Choices WHERE Subject = 'Maths' and "student #" = SC."student #" AND Required = 'N'); 

Sample SQLFiddle с тем, как работает запрос.

+0

Вопрос помечен как 'Oracle' -' [Student #] 'недействителен синтаксис Oracle; вы, вероятно, хотите «Студент #». – MT0

+0

Не удается обработать SQL Server «Студент #»? – jarlh

+0

@jarlh да, он может (http://sqlfiddle.com/#!3/f2275/3) –

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