2011-08-12 35 views
5

Vì vậy, tôi có bảng A và B trong SQL Server và các cột a và b tương ứng. Tôi muốn làm như sau trong lệnh giả truy vấn, nhưng tôi không thể tìm ra nó.Truy vấn xóa SQL Server liên quan đến hai bảng

Tôi muốn

DELETE FROM A 
WHERE a < 100 "and only if these selected (for deletion) values don't exist in column b in table B" 

Lý do là tôi đang cố gắng để xóa một số dữ liệu từ bảng A, nhưng nó được đem lại cho tôi một lỗi nói rằng có một ràng buộc giữa các giá trị trong A.a và B.b.

Điều này có liên quan đến bí danh không? Đó là khó hiểu ..

+0

Phiên bản nào của SQL Server bạn đang sử dụng ? –

Trả lời

11

Hãy thử điều này nếu bạn đang sử dụng SQL Server 2005 hoặc mới hơn:

DELETE FROM TableA 
WHERE a < 100 AND 
a NOT IN (SELECT B FROM TableB) 

Đối với SQL Server 2000 này nên làm việc:

DELETE ta 
FROM TableA as ta 
LEFT JOIN TableB as tb 
ON ta.a = tb.b 
WHERE ta.a < 100 AND tb.b IS NULL 
+0

Tôi đã không chắc chắn từ câu hỏi, nhưng cho rằng có những vi phạm ràng buộc, có thể TableB.b là một tra cứu chìa khóa nước ngoài vào TableA? Nếu vậy, sẽ có bất kỳ sự khác biệt trong các hình thức xóa khác hơn là thay thế 'id' cho 'a' trong điều khoản thích hợp? – shelleybutterfly

+0

Hmmm, tôi không chắc mình hiểu. Tôi đồng ý về giả định chính nước ngoài của bạn. Xóa này về cơ bản sẽ loại bỏ bất kỳ hồ sơ từ TableA mà không được tham chiếu từ TableB, mà dường như là những gì anh/cô ấy cần. –

+0

@Abe Miessler, truy vấn đầu tiên của bạn hoạt động rất tốt! Có vẻ như trong MSSQL bạn có thể thực thi một loạt các hạn chế ..? Tôi đã học MySQL gần đây, nhưng dường như không có bất kỳ tính năng nào trong số các tính năng này tôi thấy trong SQL Server Management Studio. – musicliftsme

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