0

私は 2 つのテーブル (SALESMAN、SOLD) を持っています。SALES テーブルには、毎日どの車が販売されたかが記録されています。夜間に、SALESMAN テーブルの SOLD カウントを増やす必要があるジョブが実行されます。たとえば、次の 2 つのテーブルがあります。

SALESMAN                                SALES
+-------------+-----------+------+      +------------+---------+
| SALESMANID  |  NAME     | SOLD |      | SALESMANID | VEHICLE |
|          1  |  Bob      |    1 |      |          1 |      GM |
|          2  |  Charlie  |    7 |      |          1 |   Chrys |
|          3  |  Dave     |    0 |      |          1 |      GM |
+-------------+-----------+------+      |          3 |   Dodge |
                                        |          3 |      GM |
                                        |          2 |  Hummer |
                                        +------------+---------+

UPDATE の実行後、ボブの販売数は 4 に増加し、チャーリーの販売数は 8 に増加し、デイブの販売数は 2 に増加します。次のようなものを作成しようとしています。

UPDATE SALESMAN SET SOLD=SOLD+( 
                                SELECT COUNT(*) 
                                FROM SALES 
                                WHERE SALESMAN.SALESMANID = SALES.SALESMANID
                              )

これは問題を解決する正しい方法ですか?

ここで同様の質問を見つけました: ( Updating one SQL table based on data in another table )しかし、それが例のテーブル A を選択的に更新するのか、それともテーブル A のすべてのレコードを更新するのかは明確ではありません。


更新: 上記のタイプミスを修正しましたが、まだ機能しません。クエリを実行すると、0 行が影響を受けます。

4

4 に答える 4

0
UPDATE SALESMAN a, 
       (SELECT SALESMANID, COUNT(*) SALE_COUNT 
        FROM SALES 
        group by SALESMANID) b 
set a.SOLD=a.SOLD+ b.SALE_COUNT 
WHERE a.SALESMANID = b.SALESMANID;

SQLフィドルを参照してください

于 2013-06-15T14:55:43.003 に答える
0

はい、あなたのクエリはこれを変更するだけです

 WHERE SALESAN.SALESMANID 

 WHERE SALESMAN.SALESMANID 

あなたのデモ

  • 質問する前に自分で試してみなかった理由がわかりません。
于 2013-06-15T14:55:51.373 に答える
0
INSERT INTO SALESMAN (SALESMANID, SOLD) (SELECT SALEMANID, COUNT(*) as c FROM SOLD GROUP BY SALEMANID) ON DUPLICATE KEY UPDATE SOLD = c

選択に名前を付けて.cを使用する必要がある場合があります

于 2013-06-15T14:57:41.670 に答える
0

この夜間プロセスの実行後に sales テーブルが削除された場合、これは機能するはずです

Update m Set
   Sold = sold + 
     (Select Count(*) From Sales
      Where SalesmanId = m.SalesmanId) 
From Salesman m
于 2013-06-15T14:59:10.827 に答える