2010-09-27 32 views
6

Làm cách nào để đơn giản hóa nhiều truy vấn 'không có trong'? Là nó hiệu quả để sử dụng nhiều truy vấn con: Không có trong (...) và Không có trong (..) và Không có trong (..)sử dụng NOT IN cho nhiều bảng

Tôi đang sử dụng count (xin lỗi quên về điều đó)

Select count (VisitorID) 

from Company 

where VisitorID not in (select VisitorID from UserLog where ActionID = 2) 

and VisitorID not in (select VisitorID from Supplies where productID = 4) 
+0

Bạn có thể cho một ý tưởng về kích thước bảng? Điều gì về tính chọn lọc của hai lựa chọn phụ? Một phần ba, 1 trong 100? – pascal

Trả lời

6
Select count (VisitorID) 

from Company C 
where 
NOT EXISTS (select * from UserLog U where ActionID = 2 AND C.VisitorID = U.VisitorID) 
AND 
NOT EXISTS (select * from Supplies S where productID = 4 AND S.VisitorID = U.VisitorID) 

Tại sao không tồn tại?

  • NOT IN: Bất kỳ giá trị NULL visitorId trong UserLog hoặc Vật tư nghĩa không phù hợp

  • (LEFT JOIN): nhiều hàng đầu ra nếu nhiều UserLog hoặc Vật tư mỗi visitorId. Cần DISTINCT làm thay đổi kế hoạch

chung, NOT EXISTS là chỉ đúng tùy chọn

2

bạn có thể sử dụng một UNION cho nhóm id

Select User 

from Company 

where VisitorID not in (
select VisitorID from UserLog where ActionID = 2 
UNION 
select VisitorID from Supplies where productID = 4 
) 
+1

điều này làm việc cho tôi. cảm ơn. – tshenolo

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