2

このおそらく単純なSQLの質問があります。

UPDATE parts
SET partscnt=partscnt-1
WHERE idparts = (SELECT idparts FROM ordercontent WHERE idOrder=4);

問題は、サブクエリが5つの値を返すことであり、各値に対して更新を実行する必要があります。

更新:ordercontentテーブルには、注文のIDと行IDpartsがあります。同じパーツのいくつかが同じ順序でフックされている場合、テーブルは次のようになります。

ID idparts
4  147
4  147
4  147
4  55
4  33

したがって、ID147のパーツのパーツ数を3回デクリメントする必要があります。

これを実現するためにこのクエリを変更するにはどうすればよいですか?

4

6 に答える 6

4

これを試してください:

UPDATE parts 
SET partscnt = partscnt-1 
WHERE idparts IN (
    SELECT idparts 
    FROM ordercontent 
    WHERE idOrder = 4
);
于 2012-11-06T19:05:21.563 に答える
1

idparts指定さordercontentれた注文のすべての数量を求めます。

SELECT idparts,
       COUNT(*) AS cnt
FROM ordercontent
WHERE idOrder = 4
GROUP BY idparts

上記の結果を結合しparts、値を使用しcntて更新しpartscntます。

UPDATE parts p
INNER JOIN (
    SELECT idparts,
           COUNT(*) AS cnt
    FROM ordercontent
    WHERE idOrder = 4
    GROUP BY idparts
) o
ON p.idparts = o.idparts
SET p.partscnt = p.partscnt - o.cnt
;
于 2012-11-06T19:34:47.623 に答える
0

「=」を IN に置き換えます。

UPDATE パーツ SET partscnt=partscnt-1 WHERE idparts IN (オーダーコンテンツから idparts を選択 WHERE idOrder=4);

于 2012-11-06T19:05:54.337 に答える
0
UPDATE parts 
SET partscnt=partscnt-1 
WHERE idparts IN
    (SELECT idparts FROM ordercontent WHERE idOrder=4); 
于 2012-11-06T19:06:53.087 に答える
0
UPDATE parts p1
INNER JOIN 
(
   SELECT *  
   FROM ordercontent WHERE idOrder = 4
) p2 ON p1.idparts = p2.idparts
SET p1.partscnt = p2.partscnt-1
于 2012-11-06T19:07:02.120 に答える
-1

「-1」を「(SELECT COUNT(*) FROM ordercontent WHERE isOrder = 4)」に置き換えます。

于 2012-11-06T19:09:01.120 に答える