Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

sql server 2008 management studio non verifica la sintassi della mia query

Sta prendendo il valore di hs_id dalla query esterna.

È perfettamente valido avere una query che non proietta alcuna colonna dalla tabella selezionata nella sua select elenco.

Ad esempio

select 10 from HotelSupplier where id = 142

restituirebbe un set di risultati con tante righe quante corrispondono a where clausola e il valore 10 per tutte le righe.

I riferimenti di colonna non qualificati vengono risolti dall'ambito più vicino verso l'esterno, quindi questo viene trattato semplicemente come una query secondaria correlata.

Il risultato di questa query sarà l'eliminazione di tutte le righe da Photo dove hs_id non è null finché HotelSupplier ha almeno una riga in cui id =142 (e quindi la sottoquery restituisce almeno una riga)

Potrebbe essere un po' più chiaro se consideri l'effetto di ciò

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

Questo è ovviamente equivalente a

delete from Photo where Photo.hs_id = Photo.hs_id

A proposito, questo è di gran lunga il "bug" più comune che personalmente ho visto erroneamente segnalato su Microsoft Connect. Erland Sommarskog lo include nella sua lista dei desideri per SET STRICT_CHECKS ON