sql >> Databasteknik >  >> RDS >> Sqlserver

sql server 2008 management studio kontrollerar inte syntaxen för min fråga

Den tar värdet hs_id från den yttre frågan.

Det är helt giltigt att ha en fråga som inte projicerar några kolumner från den valda tabellen i dess select lista.

Till exempel

select 10 from HotelSupplier where id = 142

skulle returnera en resultatuppsättning med så många rader som matchade where sats och värdet 10 för alla rader.

Okvalificerade kolumnreferenser löses från närmaste omfattning och utåt så detta behandlas bara som en korrelerad underfråga.

Resultatet av denna fråga kommer att bli att radera alla rader från Photo där hs_id är inte null så länge som HotelSupplier har minst en rad där id =142 (och så underfrågan returnerar minst en rad)

Det kanske blir lite tydligare om du tänker på vad effekten av detta är

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

Detta motsvarar givetvis

delete from Photo where Photo.hs_id = Photo.hs_id

Detta är förresten den absolut vanligaste "buggen" som jag personligen har sett felaktigt rapporterad på Microsoft Connect. Erland Sommarskog inkluderar den i sin önskelista för SET STRICT_CHECKS ON



  1. Hur man skapar och underhåller MySQL-databaser i cPanel

  2. Hur inaktiverar jag SQLAlchemy-cache?

  3. Vad är SQL Server RAISERROR?

  4. Autentiseringsplugin 'caching_sha2_password' kan inte laddas