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 で 2 つの部分に分割するのは簡単ですが、1 つのクエリで更新する方法を知りたいです。ありがとう。

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 に答える