2017-04-10 64 views
0

我有兩個模型,一個是student_profile,我有大學領域顯示大學名稱。我有一份大學的清單,我需要更新另一個名爲Package的表格,只有當表格中有一所大學存在時。表有1000記錄,我需要用一個查詢更新所有條目。在多個值上更新SQL查詢

  1. 如果大學a, b, c, d存在於student_profile
  2. 更新幾個「包」表字段。

我的表:

+---------------------------+ 
| student_profile   | 
+---------------------------+ 
| id   | int(11)  | 
| first_name | varchar(45) | 
| last_name | varchar(45) | 
| university | varchar(45) | 
+---------------------------+ 

+---------------------------+ 
| package     | 
+---------------------------+ 
| student_id | int(11)  | 
| is_active | tinyint  | 
| package_type| varchar(45) | 
+---------------------------+ 

ForeignKeysStudentProfile表:

name = student_package 
schema = mydb 
Column = student_id 
reference Schema = mydb 
referenced table = student_profile 
referenced column= id 

如果大學存在,我需要設置is_active=True,並設置package.student_id as student_profile.idpackage.package_type as 'UniverityEnrolled'。

+2

聽起來像你還有一個大學的名單? –

+0

是的。 –

+0

那麼爲什麼離開你的問題的重要信息? –

回答

0

根據我瞭解的問題,這可能是您的解決方案:

UPDATE package 
    SET is_active = 1,package_type = "UniversityEnrolled" 
WHERE student_id IN 
(SELECT id FROM student_profile WHERE university IN ("a","b","c","d")) 
+0

我收到了此消息@ dev8080。 「您正在使用安全更新模式,並且您嘗試更新沒有使用KEY列的WHERE表格要禁用安全模式,請在首選項 - > SQL編輯器中切換選項,然後重新連接0.455秒」 –

+0

這是因爲雖然我好笑student_id在哪裏不是主鍵。請參閱http://stackoverflow.com/questions/11448068/mysql-error-code-1175-during-update-in-mysql-workbench。 – dev8080

0

爲了搞清這樣的事情了,開始與選擇輸出要更新的記錄。

然後當它工作時,轉換爲更新語句。

SELECT * 
FROM `StudentProfile` a 
JOIN `Package` b 
ON a.`id` = b.`student_id` 
WHERE `university` in ('a','b','c'); 

UPDATE `StudentProfile` a 
    SET `is_active` = 1 
JOIN `Package` b 
ON a.`id` = b.`student_id` 
WHERE `university` in ('a','b','c'); 
+0

Workbench在更新下的「JOIN'Package'b上顯示錯誤 –

+0

錯誤是什麼 –

+0

可能很簡單,將Set行移動到ON行之後,沒有測試過,只是離開了我的頭頂 –