1

我有两张桌子

表库存:

item_no
item_name
item_qty

表位置:

orderno
qty

我想将购买的物品(数量)扣除到库存物品(物品数量)中。所以我可以直接更新 table_inventory

UPDATE table_inventory 
SET item_qty = (item_qty - (SELECT qty FROM tblpos WHERE qty='" & txtqty.Text & "'))
WHERE item_no='" & txtitemno.Text & "'

我似乎猜对了,但每当我两次尝试相同的项目时。我会得到“子查询返回超过 1 行”

4

3 回答 3

0

关于什么?:

UPDATE table_inventory 
SET 
    item_qty = (item_qty - (SELECT qty FROM tblpos WHERE qty='" & txtqty.Text & "' LIMIT 0,1)) 
WHERE item_no='" & txtitemno.Text & "'

您真的应该制作一个sqlfiddle,以便人们可以更好地帮助您。

于 2012-11-21T08:08:47.083 回答
0

首先,该查询看起来很可疑——从用户指定 qty 值的表中选择 qty。

为什么不直接在 txtqty.Text 中使用用户输入?

其次,如错误所示,SELECT 返回具有相同数量值的多行。如果这就是您要查询的内容,您可以简单地添加DISTINCT子句以仅获取一行一列。

UPDATE table_inventory 
SET 
    item_qty = 
        (item_qty - (
                     SELECT DISTINCT qty 
                     FROM tblpos 
                     WHERE qty='" & txtqty.Text & "'
                     )
        )
WHERE item_no='" & txtitemno.Text & "'

或者简单地说,只使用用户输入本身。

此外,您的查询构造容易受到 SQL 注入的影响,因为您只是在读取用户输入并将其附加到您的查询中而没有对其进行清理。你也应该注意这一点。

于 2012-11-21T08:12:56.147 回答
0

我认为你sum在扣除之前需要数量,所以我的建议如下,

UPDATE table_inventory 
SET item_qty = 
(item_qty - (SELECT sum(qty) FROM tblpos WHERE qty='" & txtqty.Text & "' group by qty))
WHERE item_no='" & txtitemno.Text & "'
于 2012-11-21T08:24:20.463 回答