2017-04-10 52 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行之后,没有测试过,只是离开了我的头顶 –