Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何基于select语句更新行_Mysql_Sql - Fatal编程技术网

Mysql 如何基于select语句更新行

Mysql 如何基于select语句更新行,mysql,sql,Mysql,Sql,我正在尝试使用以下查询更新子查询返回的某些行上的列。子查询选择需要更新的行的正确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(

我正在尝试使用以下查询更新子查询返回的某些行上的列。子查询选择需要更新的行的正确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中很容易分成两部分,但我想知道如何用一个查询来更新它。谢谢。

更改
存在的位置(

若要
在Im.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
    WHERE Img.imageId = Im.id)
此外,您的查询很复杂。 不幸的是,我不知道您的数据库结构,但看起来您可以使用多个表的更新简化查询