2009-02-28 34 views
40

Tôi muốn xóa các hàng khỏi biến bảng SQL Server 2000/2005 dựa trên sự hiện diện của các hàng khác trong cùng một bảng (xóa tất cả 0 hàng đếm nếu không phải là 0 hàng tồn tại cùng ngày). Dưới đây là một ví dụ đơn giản rằng chỉ cần xóa các dòng bổ sung đầu tiên:Biến Bảng với Bí danh trong Tuyên bố Xóa Từ

declare @O table (
    Month datetime, 
    ACount int NULL 
) 

insert into @O values ('2009-01-01', 0) 
insert into @O values ('2009-01-01', 1) 
insert into @O values ('2008-01-01', 1) 
insert into @O values ('2007-01-01', 0) 

delete from @O o1 
where ACount = 0 
    and exists (select Month from @O o2 where o1.Month = o2.Month and o2.ACount > 0) 

Vấn đề là tôi không thể có được SQL server để chấp nhận bí danh o1 biến của bảng (và tôi nghĩ rằng một bí danh là cần thiết do sự "o1.Month = o2.Month" tên trường trùng khớp). Lỗi này là:

Msg 102, Level 15, State 1, Line 11

cú pháp sai gần 'o1'.

Trả lời

52

Chỉ định tên bí danh trước TỪ tuyên bố Ý nghĩa, bạn đang xóa từ bảng aliased.

delete o1 
from @O as o1 
where ACount = 0 
     and exists (select Month 
        from @O o2 
        where o1.Month = o2.Month 
          and o2.ACount > 0) 


quả

alt text

+0

Chà, không biết về cú pháp này! Nếu bạn không dán hình ảnh, tôi đã từ chối nó là không hợp lệ. Điều này làm việc trên SQL2000 hoặc chỉ trên SQL Server 2005? Tôi đang ở nhà ngay bây giờ nên không thể xác minh trực tiếp. –

+0

Nó sẽ hoạt động trên SQL 2k/2k5/2k8 (nó đã được thử nghiệm trên 2k8 trên ảnh chụp màn hình) - Không bao giờ xử lý với SQL 7 vì vậy không chắc chắn về 7 – Sung

8

Hãy thử điều này, nó nên làm việc (người đầu tiên TỪ là không bắt buộc):

DELETE [FROM] @O 
FROM @O o1 
where ACount = 0 
and exists (select Month from @O o2 
     where o1.Month = o2.Month and o2.ACount > 0) 

Lý do là: DELETE, như giải thích here, hy vọng một bảng bí danh không bí danh t, một TỪ tùy chọn có thể đứng trước nó. Sau đó, bạn có thể đặt bí danh trên bảng trong FROM thứ hai, nếu bạn cần thực hiện JOIN, truy vấn con, v.v.

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