我的任务是通过将“ 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
不幸的是,一个人以失败告终!如果有人能帮助我并指出正确的方向,我将不胜感激。
谢谢!
答案 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 ;