2011-11-04 30 views
9

này chỉ trông rất lạ với tôi:Làm thế nào một truy vấn SQL có hai từ mệnh đề?

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

CáC#Common là một bảng tạm thời, nhưng phần còn lại của nó làm cho không có ý nghĩa với tôi. Làm thế nào bạn có thể có hai từ? Xin vui lòng giúp một noob ra.

Trả lời

12

Như có thể thấy trong tài liệu của DELETE, có thể mất hai mệnh đề FROM.

Đầu tiên FROM:

TỪ: là một từ khóa tùy chọn có thể được sử dụng giữa các từ khóa DELETE và table_or_view_name mục tiêu, hoặc rowset_function_limited.

Thứ hai FROM:

FROM <table_source>: Chỉ định thêm mệnh đề FROM. Phần mở rộng Transact-SQL này cho DELETE cho phép chỉ định dữ liệu từ và xóa các hàng tương ứng từ bảng trong mệnh đề FROM đầu tiên.

Tiện ích này, chỉ định tham gia, có thể được sử dụng thay cho truy vấn phụ trong mệnh đề WHERE để xác định các hàng cần xóa.

Vì vậy, SQL sẽ xóa các bản ghi từ Products bảng mà có một mục phù hợp khi nó được nối với #common.

Đây là tương đương (trong ý nghĩa) để truy vấn sau đây:

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

Tốt câu trả lời và nhờ các liên kết. – broke

2

Bạn có thể hạn chế bộ hồ sơ bạn muốn xóa bởi nhiều hơn một bảng. Thứ hai from chỉ tạo bí danh C cho bảng bạn xóa khỏi, tham gia bảng đó với bảng #common và chỉ xóa các bản ghi có bản ghi trong talbe #common.

1

Từ MSDN Thứ hai từ cho phép bạn tạo bộ lọc mà các hàng tương ứng trong hàng đầu tiên sẽ bị xóa ở vị trí phù hợp.

Trong trường hợp này Xóa tất cả [GearsDev]. [Dbo]. [Sản phẩm] nơi ItemNumber có hàng tương ứng trong #Common với mục tương ứng của cùng một giá trị

Các vấn đề liên quan