我有两张桌子
table_inventory:
item_no
item_name
item_qty
table_pos:
orderno
qty
我想将购买的商品(数量)扣除到库存商品(item_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行”
答案 0 :(得分: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,这样人们可以更好地帮助你。
答案 1 :(得分:0)
首先,该查询看起来很可疑 - 从用户指定的qty值的表中选择qty。
为什么不直接在txtqty.Text中使用用户输入?
其次,正如错误所示,SELECT返回具有相同qty值的多行。如果这是您的查询将是什么,您只需添加DISTINCT
子句以获得一行一行。
UPDATE table_inventory
SET
item_qty =
(item_qty - (
SELECT DISTINCT qty
FROM tblpos
WHERE qty='" & txtqty.Text & "'
)
)
WHERE item_no='" & txtitemno.Text & "'
或者简单地说,只需使用用户输入本身。
此外,您的查询构造很容易进行SQL注入,因为您只是在阅读用户输入并将其附加到查询中而不对其进行清理。你也应该照顾好。
答案 2 :(得分: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 & "'