0

我正在尝试使用以下查询更新子查询返回的某些行上的列。子查询选择需要更新的行的正确 ID。

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 中很容易分成两部分,但我想知道如何用一个查询来更新它。谢谢。

4

2 回答 2

1

更改WHERE EXISTS (WHERE Im.id IN (

于 2012-10-10T22:48:59.547 回答
0

您的查询有误,您忘记在尝试更新的表和 EXISTS 中的语句之间定义连接条件

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)

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

于 2012-10-11T00:06:24.403 回答