Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Giá trị WHERE KHÔNG CÓ TRONG (truy vấn con)

Đã 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ụ

Sql Fiddle

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

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn MySQL Workbench - Hướng dẫn Toàn diện về Công cụ RDBMS

  2. Chuẩn hóa trong MYSQL

  3. Cách viết nhiều cột trong mệnh đề với sqlalchemy

  4. so sánh ngày theo tháng và năm trong mysql

  5. Tại sao kết nối với máy chủ MySQL quá chậm?