更新使用不同的条件

时间:2012-08-10 08:34:00

标签: mysql

SELECT gg.itemid,gi.id,gi.courseid, gg.userid, gg.finalgrade 
FROM pauls_grade_grades gg, pauls_grade_items gi 
WHERE gg.itemid = gi.id AND gg.userid =36 AND gi.courseid = 13 

我想要上面相同的选择查询的更新查询。

UPDATE pauls_grade_grades 
SET pauls_grade_grades.finalgrade = 28 
WHERE usermodified IS NULL AND userid = 36 AND 
       itemid IN (SELECT gi.id 
                  FROM pauls_grade_items gi 
                  WHERE gi.courseid=13)

这是编写UPDATE查询的正确方法吗

3 个答案:

答案 0 :(得分:0)

您为更新而编写的查询将正常运行 让我解释一下你的查询的作用 您正在使用子查询进行更新。首先是子查询

SELECT gi.id 
FROM pauls_grade_items gi 
WHERE gi.courseid=13

将被执行。它返回的值将被主查询中的此子查询替换。

答案 1 :(得分:0)

查询正确

如果您无法更新数据,则表示该行不存在。 尝试使用where子句并将其添加到SELECT语句中,并确保您可以先选择一些内容...例如

select * from pauls_grade_grades 
WHERE usermodified IS NULL AND userid = 36 AND itemid IN 
(SELECT gi.id 
FROM pauls_grade_items gi 
WHERE gi.courseid=13) 

然后将其添加回更新语句

UPDATE pauls_grade_grades SET finalgrade = 29 WHERE usermodified IS NULL AND userid = 36 AND itemid IN  (SELECT gi.id 
FROM pauls_grade_items gi 
WHERE gi.courseid=13) 

答案 2 :(得分:0)

基本上,您可以使用SELECT查询来编写UPDATE查询。 试试这个:

UPDATE pauls_grade_grades gg, pauls_grade_items gi 
SET gg.finalgrade = 28
WHERE gg.itemid = gi.id AND gg.userid =36 AND gi.courseid = 13
    AND usermodified IS NULL