sql >> Database >  >> RDS >> Sqlserver

sql server 2008 management studio controleert de syntaxis van mijn vraag niet

Het neemt de waarde van hs_id van de buitenste vraag.

Het is perfect geldig om een ​​query te hebben die geen kolommen uit de geselecteerde tabel projecteert in zijn select lijst.

Bijvoorbeeld

select 10 from HotelSupplier where id = 142

zou een resultatenset retourneren met zoveel rijen als overeenkomend met de where clausule en de waarde 10 voor alle rijen.

Niet-gekwalificeerde kolomverwijzingen worden opgelost vanaf het dichtstbijzijnde bereik, dus dit wordt gewoon behandeld als een gecorreleerde subquery.

Het resultaat van deze zoekopdracht is dat alle rijen uit Photo . worden verwijderd waar hs_id is niet null zolang HotelSupplier ten minste één rij heeft waarbij id =142 (en dus de subquery retourneert ten minste één rij)

Het wordt misschien wat duidelijker als je bedenkt wat het effect hiervan is

delete from Photo  where Photo.hs_id  in (select Photo.hs_id)

Dit is natuurlijk gelijk aan

delete from Photo where Photo.hs_id = Photo.hs_id

Dit is trouwens verreweg de meest voorkomende "bug" die ik persoonlijk ten onrechte op Microsoft Connect heb gezien. Erland Sommarskog neemt het op in zijn verlanglijst voor SET STRICT_CHECKS ON



  1. SQL ALTER TABLE-syntaxis - weergegeven door DBMS

  2. T-SQL-query om tabeldefinitie te tonen?

  3. Hoe voer je een SQLite-query uit binnen een Android-applicatie?

  4. Foreign Key SQL:alles wat u moet weten over Foreign Key Operations