-1

と の 2 つのテーブルがsalesありproductlistます。テーブルにこれらのff値があるとしましょう

これは の ff 値です。sales

id | pcode | qty_sold |
1  |  123  |  20      | 
2  |  123  |  20      | 

これは の ff 値です。productlist

id | pcode | pleft | 
6  |  123  |  20   |  
7  |  333  |  40   |

私の問題は次のとおりです。1 つproductlistの製品を更新すると、更新したい製品で適切に更新されますが、他の製品データは 0 になります。更新時の期待値は次のproductlistようになります。

id | pcode | pleft | 
6  |  123  |  60   |  
7  |  333  |  40   |   

私はこれまでにこのコードを持っています:

mysql_query("UPDATE productlist SET pleft=pleft+(SELECT SUM(qty_sold) ".
            "FROM sales WHERE sales.pcode=productlist.pcode)"); 

しかし、次のように表示されます。

id | pcode | pleft | 
6  |  123  |  60   |  
7  |  333  |  0    | 
4

3 に答える 3

1

WHERE内部クエリにのみ使用しています。

WHERE特定のレコードを更新するには、外部クエリに使用する必要があります。

UPDATE productlist 
SET pleft=pleft+(SELECT SUM(qty_sold) FROM sales WHERE sales.pcode=productlist.pcode)
WHERE productlist.pcode = "id";
于 2013-09-02T04:33:01.783 に答える
1

次のようなステートメントのWHERE節を見逃したと思います。UPDATE

UPDATE productlist 
    SET pleft=pleft+(SELECT SUM(qty_sold) FROM sales WHERE sales.pcode=productlist.pcode)
WHERE productlist.pcode = "your_id";
于 2013-09-02T04:31:04.347 に答える
0

「0」を取得する理由は、あなたの選択は最初の ID に対して「40」を返しますが、2 番目の ID に対して行が返されないためです。したがって、null と見なされます。つまり、2 番目の ID に「0」が返されます。l ifnull(select,0) 関数を使用してみてください。

UPDATE productlist SET pleft=pleft+ifnull((SELECT SUM(qty_sold)
        FROM sales WHERE sales.pcode=productlist.pcode),0)
于 2013-09-02T06:56:20.507 に答える