Đã cập nhật: Chúng ta nên sử dụng ưu tiên sử dụng các phép nối để có hiệu suất tốt hơn khi nó dễ thực hiện đối với chúng ta. Tham gia so với truy vấn phụ
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
Lưu ý:Tôi đã thay đổi khách hàng tên cột cho t3 vì hai bảng được kết hợp phải có tên cột khác nhau
Giải thích:
Sử dụng truy vấn nội bộ hoặc truy vấn phụ sẽ tốn kém khi bạn có dữ liệu lớn. thay vào đó hãy sử dụng phép nối, hãy học cách chuyển đổi truy vấn con để tham gia
Với Truy vấn con Chúng tôi đã có:
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
Chuyển đổi truy vấn phụ để tham gia
Bước đầu tiên:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA')
) t2
on o.customer != t2.changedname;
Bước thứ 2:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2 where invoice
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
Vậy là xong, nhanh hơn nhiều đối với các bảng có nhiều hàng
Câu trả lời ban đầu:
Sử dụng not in
. Hãy xem.
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
Chỉnh sửa Tôi đã thêm tính năng khác biệt để làm cho truy vấn nhanh hơn