0
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 查询的正确方法吗

4

3 回答 3

0

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

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

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

于 2012-08-10T08:37:19.607 回答
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) 

然后将 where 添加回您的更新语句

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) 
于 2012-08-10T08:43:09.100 回答
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
于 2012-08-10T08:45:58.690 回答