2012-10-10 86 views
0

我试图使用以下查询来更新子查询返回的某些行上的列。子查询选择需要更新的行的正确ID。如何根据select语句更新行

UPDATE 4_dev.Images AS Im 
     SET Im.primary=1 
     WHERE EXISTS (
SELECT Img.imageId FROM (
SELECT I.id AS imageId, 
     I.userId, 
     I.date, 
     SUM(I.primary) AS hasPrimary, 
     COUNT(*) AS numImages 
FROM 4_dev.Images AS I 
GROUP BY I.userId 
HAVING numImages>=1 AND hasPrimary=0) AS Img) 

但此查询更新每一行,而不仅仅是在SELECT子查询中的行。

这将很容易在PHP中分成两部分,但我想知道如何用一个查询来更新它。谢谢。

回答

1

变化WHERE EXISTS (WHERE Im.id IN (

0

你在查询一个错误,你忘了定义连接表之间的条件,您尝试更新和声明中是否存在

UPDATE 4_dev.Images AS Im 
    SET Im.primary=1 
WHERE EXISTS (
    SELECT Img.imageId 
    FROM (
    SELECT I.id AS imageId, 
     I.userId, 
     I.date, 
     SUM(I.primary) AS hasPrimary, 
     COUNT(*) AS numImages 
    FROM 4_dev.Images AS I 
    GROUP BY I.userId 
    HAVING numImages>=1 AND hasPrimary=0) AS Img 
    WHERE Img.imageId = Im.id) 

而且您的查询是复杂的。 不幸的是我不知道你的数据库结构,但看起来像你可以使用来自多个表的更新来简化你的查询 http://forums.mysql.com/read.php?20,85813,85813