Mysql
 sql >> Baza danych >  >> RDS >> Mysql

WHERE value NOT IN (podzapytanie)

Aktualizacja: Powinniśmy używać preferuj, aby używać złączeń, aby uzyskać lepszą wydajność, gdy jest to dla nas łatwe. Dołącz a podzapytanie

Skrzypce 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;

Uwaga:zmieniłem nazwę kolumny customer na t3, ponieważ dwie połączone tabele muszą mieć różne nazwy kolumn

Wyjaśnienie:

Używanie zapytania wewnętrznego lub podrzędnego jest kosztowne, gdy masz duże zbiory danych. zamiast tego użyj złączeń, nauczmy się konwertować podzapytanie, aby dołączyć

Z Podzapytaniem Mieliśmy:

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

Konwertowanie podzapytania na dołączenie

Pierwszy krok:

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;

Drugi krok:

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;

I to wszystko, znacznie szybciej w przypadku tabel z wieloma wierszami

Oryginalna odpowiedź:

Użyj not in . Zajrzyj.

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

Edytuj Dodałem wyróżnienie, aby przyspieszyć zapytanie

Skrzypce SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Optymalizacja baz danych Mysql

  2. Pusta strona po stronie administratora Opencart

  3. Zarządzanie kontami użytkowników, role, uprawnienia, uwierzytelnianie PHP i MySQL -- Część 5

  4. BŁĄD 1067 (42000):Nieprawidłowa wartość domyślna dla „end_time”

  5. Magento Mass Import obrazów za pomocą MAGMI - obrazy wyłączone