1

私は2つのテーブルを持っています

table_inventory:

item_no
item_name
item_qty

テーブル位置:

orderno
qty

購入したアイテム(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 & "'

私はそれを正しく推測しているようですが、同じアイテムを2回試したときはいつでも. 「サブクエリが複数の行を返します」が表示されます

4

3 に答える 3

0

まず、そのクエリは疑わしいように見えます-qty 値がユーザーによって指定されたテーブルから qty を選択します。

txtqty.Text で直接ユーザー入力を使用しないのはなぜですか?

2 つ目は、エラーが示すように、SELECT が同じ数量値を持つ複数の行を返していることです。それがクエリになる場合は、DISTINCT句を追加するだけで、1 つの列で 1 つの行だけを取得できます。

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

どうでしょうか?:

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

差し引く前に数量が必要だと思う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 に答える