Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

sql server 2008 management studio nie sprawdza składni mojego zapytania

Pobiera wartość hs_id z zewnętrznego zapytania.

Dobrze jest mieć zapytanie, które nie wyświetla żadnych kolumn z wybranej tabeli w swoim select lista.

Na przykład

select 10 from HotelSupplier where id = 142

zwróci zestaw wyników z tyloma wierszami, ile pasuje do where klauzula i wartość 10 dla wszystkich rzędów.

Niekwalifikowane odwołania do kolumn są rozwiązywane z najbliższego zakresu na zewnątrz, więc jest to traktowane jako skorelowane zapytanie podrzędne.

Wynikiem tego zapytania będzie usunięcie wszystkich wierszy z Photo gdzie hs_id nie jest null, o ile HotelSupplier ma co najmniej jeden wiersz, gdzie id =142 (a więc podzapytanie zwraca co najmniej jeden wiersz)

Może to być nieco jaśniejsze, jeśli weźmiesz pod uwagę, jaki jest to efekt

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

Jest to oczywiście równoznaczne z

delete from Photo where Photo.hs_id = Photo.hs_id

Nawiasem mówiąc, jest to zdecydowanie najczęstszy „błąd”, który osobiście widziałem, błędnie zgłoszony w Microsoft Connect. Erland Sommarskog umieszcza go na swojej liście życzeń dla SET STRICT_CHECKS ON



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL WHERE.. IN klauzula wiele kolumn

  2. Jak dodać ciąg z wartością automatycznego przyrostu w programie SQL Server?

  3. Jak wybrać pierwszy dzień miesiąca w SQL?

  4. Jak usunąć rozszerzone znaki ASCII z ciągu w T-SQL?

  5. Zapytanie SQL „LIKE” przy użyciu „%”, gdzie kryteria wyszukiwania zawierają „%”