Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

DI MANA nilai TIDAK DI (subquery)

Diperbarui: Kita harus menggunakan lebih suka menggunakan gabungan untuk kinerja yang lebih baik ketika itu mudah dilakukan untuk kita. Gabung vs. sub-kueri

Biola Sql

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;

Catatan:Saya mengubah nama kolom pelanggan untuk t3 karena dua tabel yang digabungkan harus memiliki nama kolom yang berbeda

Penjelasan:

Menggunakan kueri dalam atau sub itu mahal ketika Anda memiliki data besar. gunakan join sebagai gantinya, mari belajar mengonversi subquery untuk bergabung

Dengan Subkueri Kami memiliki:

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'));

Mengonversi subkueri untuk bergabung

Langkah pertama:

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;

Langkah ke-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;

Dan hanya itu, jauh lebih cepat untuk tabel yang memiliki banyak baris

Jawaban asli:

Gunakan not in . Lihat.

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'));

Sunting Saya telah menambahkan yang berbeda untuk membuat kueri lebih cepat

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. cara keluar dari karakter khusus dalam string koneksi jdbc mysql

  2. Bisakah 'salah' cocok dengan beberapa string di mysql?

  3. SQL:Dapatkan catatan yang memenuhi kondisi yang berasal dari beberapa catatan

  4. Bagaimana cara mengurutkan tabel MYSQL secara permanen?

  5. Kebingungan klausa WHERE dengan PDO