hs_id
の値を取得しています 外部クエリから。
select
で、選択したテーブルの列を投影しないクエリを使用することは完全に有効です。 リスト。
例
select 10 from HotelSupplier where id = 142
where
と一致する数の行を含む結果セットを返します 句と値10
すべての行に対して。
修飾されていない列参照は、最も近いスコープから外側に向かって解決されるため、これは相関サブクエリとして扱われます。
このクエリの結果は、Photo
からすべての行を削除することです。 ここで、hs_id
HotelSupplierにid=142の行が少なくとも1つある限り、nullにはなりません(したがって、サブクエリは少なくとも1つの行を返します)
これの効果を考えれば、もう少し明確になるかもしれません
delete from Photo where Photo.hs_id in (select Photo.hs_id)
もちろんこれは
と同等ですdelete from Photo where Photo.hs_id = Photo.hs_id
ちなみに、これは私が個人的にMicrosoftConnectで誤って報告した最も一般的な「バグ」です。 Erland Sommarskogは、SET STRICT_CHECKS ON
のウィッシュリストにそれを含めています。