在多个值上更新SQL查询

时间:2017-04-10 18:08:28

标签: mysql

我有两个模型,一个是student_profile,我有大学字段来显示大学名称。我有一个大学列表,我需要更新另一个名为Package的表,只有当一个大学存在于表中时。表有1000个记录,我需要用一个查询更新所有条目。

  1. 如果a, b, c, d
  2. 中存在大学student_profile
  3. 更新一些" Package"表格字段。
  4. 我的桌子:

     +---------------------------+
     | 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) | 
     +---------------------------+
    
    ForeignKeys表中的

    StudentProfile表:

    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)

根据我对该问题的理解,这可能是您的解决方案:

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"))

答案 1 :(得分:0)

要想出这样的结果,请从输出要更新的记录的SELECT开始。

然后当它工作时,转换为更新语句。

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