2012-02-07 63 views
0

在我的數據庫中,教師有一個TeacherPIN,Name和Pay。我的數據庫也有一個Class,它包含一個ClassPIN以及一個TeacherPIN和Student,它提供了TeacherPIN以及幾個ClassPIN。我想根據他們是否有超過25名學生在某個班上更新某位教師的工資,但我堅持了。目前,我正在做:基於幾個參數的MySQL更新

update Teacher 
set Pay = Pay + 1000 
where (TeacherPIN = c.TeacherPIN from Class c 
and c.ClassPIN = '1010') 
and (select count(s.ClassPIN) from Student s 
where s.ClassPIN = '1010') >= 25; 

我知道這可能是非常錯誤的,很想朝正確的方向輕推。

+1

看看http://stackoverflow.com/questions/806882/update-multiple-tables-in-mysql-using-left-join並記住,你可以在這裏使用任何類型的連接,而不僅僅是左連接,這應該讓你更接近你想要的東西。 – 2012-02-07 04:48:11

+0

您能詳細介紹學生表嗎?提供它包含的所有字段,並請解釋爲什麼它有一個引用老師表 – 2012-02-07 05:52:15

回答

0

你可以嘗試以下方法:

UPDATE Teacher t 
SET Pay = Pay + 1000 
LEFT JOIN Class c ON c.TeacherPIN=t.TeacherPIN 
LEFT JOIN Student s ON s.ClassPIN = c.ClassPIN 
WHERE COUNT(IF(s.ClassPin='1010',1,NULL))>25; 

兩個JOIN小號帶來班上和學生信息,COUNT(IF(s.ClassPin='1010',1,NULL))計數了多少s.ClassPins有下「1010」。

(我會檢查它首先,雖然:

SELECT * 
FROM Teacher t 
LEFT JOIN Class c ON c.TeacherPIN=t.TeacherPIN 
LEFT JOIN Student s ON s.ClassPIN = c.ClassPIN 
WHERE COUNT(IF(s.ClassPin='1010',1,NULL))>25; 

這並假設有每個班級只有一個老師。

+0

這個技巧!謝謝! – NSchulze 2012-02-07 18:24:11