Es nimmt den Wert von hs_id
an aus der äußeren Abfrage.
Es ist absolut zulässig, eine Abfrage zu haben, die keine Spalten aus der ausgewählten Tabelle in ihrem select
projiziert Liste.
Zum Beispiel
select 10 from HotelSupplier where id = 142
würde eine Ergebnismenge mit so vielen Zeilen zurückgeben, wie mit where
übereinstimmen -Klausel und den Wert 10
für alle Zeilen.
Unqualifizierte Spaltenreferenzen werden vom nächstgelegenen Bereich nach außen aufgelöst, sodass dies nur als korrelierte Unterabfrage behandelt wird.
Das Ergebnis dieser Abfrage ist das Löschen aller Zeilen aus Photo
wobei hs_id
ist nicht null, solange HotelSupplier mindestens eine Zeile mit id =142 hat (und daher gibt die Unterabfrage mindestens eine Zeile zurück)
Es könnte etwas klarer werden, wenn Sie bedenken, was dies bewirkt
delete from Photo where Photo.hs_id in (select Photo.hs_id)
Dies ist natürlich äquivalent zu
delete from Photo where Photo.hs_id = Photo.hs_id
Übrigens ist dies bei weitem der häufigste "Fehler", den ich persönlich gesehen habe, der fälschlicherweise auf Microsoft Connect gemeldet wurde. Erland Sommarskog nimmt es in seine Wunschliste für SET STRICT_CHECKS ON
auf