Diperbarui: Kita harus menggunakan lebih suka menggunakan gabungan untuk kinerja yang lebih baik ketika itu mudah dilakukan untuk kita. Gabung vs. sub-kueri
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