4

同じJoinとWhere句を持つ2つのSQLステートメントがありますが、updateステートメントが変更されると(私の場合は80、それがすべての行です)、selectステートメントが異なる行数(私の場合は42)を与えるという問題がありますテーブルの)。

これが最初のものです(影響を受ける行数を確認するためにこれを使用します):

SELECT COUNT(*) 
  FROM classes AS c
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 32

そしてここで2番目(これは仕事をします、それはテーブルクラスの1つのフィールドを更新します):

UPDATE classes SET Cl_Status = 3
  FROM classes AS c 
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 80 (!)

最初のステートメントと2番目のステートメントの違いは最初の行だけで、他のすべては同じです。

両方のステートメントで同じ数の行を取得するために何が変更されるかを誰かが知っていますか?

4

2 に答える 2

5

UPDATEクエリはSELECTクエリとは異なり、自己結合があり、このためすべてのレコードにアクセスします。

マニュアルから:

自己結合を意図していない限り、ターゲットテーブルをfrom_listに表示してはならないことに注意してください。

于 2011-09-06T09:07:31.973 に答える
3

あなたが欲しいのは

UPDATE classes
   SET CL_Status = 3
  FROM programs 
 WHERE classes.Pr_ID = programs.Pr_ID
   AND programs.Ma_ID = 8
于 2011-09-06T09:50:59.947 に答える