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

所以我需要将 id 为 147 的零件的零件数减少三倍。

如何更改此查询以实现此目的?

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

求指定订单的每件数量idpartsordercontent

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:

更新部分 SET partscnt=partscnt-1 WHERE idparts IN (SELECT idparts FROM ordercontent 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 回答