MySQL将SELECT命令转换为UPDATE

时间:2019-01-11 11:26:41

标签: mysql sql

我的任务是通过将“ ap_criteria”表中“值”列的值从0更改为1来更新数据库。

我必须更改执行此操作时得到的特定组的值:

SELECT id, name, surname
FROM ap_volunteer 
WHERE medical_certificate = 1 
AND (id IN (SELECT DISTINCT(id_volunteer) 
FROM ap_criteria 
WHERE id_type = 177 
AND value = '0'))
ORDER BY name ASC 

我做了几次尝试,但是我在SQL方面的有限经验肯定可以证明。这是我最近的尝试:

UPDATE `ap_criteria`
INNER JOIN ap_volunteer ON ap_criteria.id_volunteer = ap_volunteer.id
WHERE medical_certificate = 1
AND (id IN (SELECT DISTINCT(id_volunteer) 
FROM ap_criteria
AND id_type = 177 AND value = 0))
SET ap_criteria.value = 1

不幸的是,一个人以失败告终!如果有人能帮助我并指出正确的方向,我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

正确的语法如下:

UPDATE ap_criteria c JOIN
       ap_volunteer v
       ON c.id_volunteer = v.id
    SET c.value = 1
WHERE medical_certificate = 1 AND
      id IN (SELECT c2.id_volunteer 
             FROM ap_criteria c2 
             WHERE c2.id_type = 177 AND
                   c2.value = 0
            );

您会注意到,我还添加了表别名,合格的列名(我可以分辨它们的来源),并从不需要的子查询中删除了DISTINCT

编辑:

在MySQL中,您需要使用JOIN

UPDATE ap_criteria c JOIN
       ap_volunteer v
       ON c.id_volunteer = v.id JOIN
       (SELECT DISTINCT c2.id_volunteer 
        FROM ap_criteria c2 
        WHERE c2.id_type = 177 AND
              c2.value = 0
       ) c2
       ON v.id = c2.id_volunteer
    SET c.value = 1
WHERE medical_certificate = 1 ;