2011-11-04 12 views
9

To po prostu wygląda tak dziwnie do mnie:W jaki sposób zapytanie SQL może zawierać dwie klauzule?

delete from [GearsDev].[dbo].[Products] 
from [GearsDev].[dbo].[Products] as C 
inner join #common M 
    on M.item = C.ItemNumber 

#Common jest tabela temp, ale reszta to nie ma sensu do mnie. Jak możesz mieć dwa skórki? Pomóż noobowi.

Odpowiedz

12

Jak można zobaczyć z dokumentacji DELETE, może to zająć dwie klauzule FROM.

Pierwszy FROM:

OD: jest opcjonalnym słów kluczowych, które mogą być wykorzystane między Usuń słowo kluczowe i table_or_view_name docelowym lub rowset_function_limited.

Drugi FROM:

FROM <table_source>: określa dodatkowe FROM. To rozszerzenie języka Transact-SQL do DELETE umożliwia określanie danych i usuwanie odpowiednich wierszy z tabeli w pierwszej klauzuli FROM.

To rozszerzenie, określające łączenie, może być używane zamiast podkwerendy w klauzuli WHERE do identyfikowania wierszy do usunięcia.

Tak, SQL usunie rekordy z tabeli Products że masz element pasujący gdy jest ona połączona z #common.

Jest to równoważne (w rozumieniu) z następującym zapytaniem:

delete from [GearsDev].[dbo].[Products] 
where ItemNumber in 
(
    select item from #common 
) 
+0

dobra odpowiedź i dzięki za link. – broke

2

Można ograniczyć zestaw rekordów, które chcesz usunąć więcej niż jednej tabeli. Drugi from po prostu generuje alias C dla tabeli, z której usuwasz, łączy ją z tabelą #common i usuwa tylko rekordy, które mają rekord w talbe #common.

1

Od MSDN Drugi z pozwala utworzyć filtr, w którym odpowiadające mu wiersze pierwszego z są usuwane, jeśli są zgodne.

W tym przypadku Usuń wszystko [GearsDev]. [Dbo]. [Produkty] gdzie Nummer artykułu ma odpowiedni wiersz w #Common z przedmiotu o tej samej wartości

Powiązane problemy