2015-08-21 66 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確保它的甲骨文兼容):

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'); 

樣品SQLFiddle與查詢是如何工作的。

+0

這個問題被標記爲'Oracle' - '[Student#]'是無效的Oracle語法;你可能想要''學生#「'。 – MT0

+0

SQL Server不能處理「學生#」嗎? – jarlh

+0

@jarlh是的,它可以(http://sqlfiddle.com/#!3/f2275/3) –