1

次のコードで JOIN と WHERE の両方が内部結合を記述している場合、サブクエリの WHERE 句は目的の行を選択的に更新することで実際に意図したとおりに機能しますが、サブクエリの JOIN 句はすべての行を同じ値で更新します。

UPDATE #TEMP_ST
SET Absence = 1
where exists (SELECT * FROM sd.studentlist sl join
              #TEMP_ST st ON st.id = sl.studentid and
              st.fiscalyear = sl.fiscalyear and
              st.schoolid = sl.schoolid and
              sl.absence = 1)


UPDATE #TEMP_ST
SET Absence = 1
where exists (SELECT * FROM sd.studentlist sl
              where #TEMP_ST.id = sl.studentid and
              #TEMP_ST.fiscalyear = sl.fiscalyear and
              #TEMP_ST.schoolid = sl.schoolid and
              sl.absence = 1)
4

1 に答える 1

1

結合なしのサブクエリでは、#TEMP_ST更新中のテーブルを参照します。更新されるテーブルの行ごとに、更新される行の値を使用してサブクエリが評価されます。

結合のあるサブクエリでは、更新中のテーブルを参照しません。更新される行に関係なく、サブクエリは同じ結果を返します。結果が空ではないため、すべての行が影響を受けます。

于 2013-09-10T04:43:39.390 に答える