sql >> Databáze >  >> RDS >> Mysql

WHERE value NOT IN (poddotaz)

Aktualizováno: Měli bychom raději používat spojení pro lepší výkon, když je to pro nás snadné. Připojit se vs. dílčí dotaz

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;

Poznámka:Změnil jsem název sloupce customer pro t3, protože dvě spojené tabulky musí mít různé názvy sloupců

Vysvětlení:

Použití vnitřního nebo dílčího dotazu je drahé, když máte velká data. místo toho použijte spojení, naučte se převádět poddotaz na spojení

Pomocí Poddotazu Měli jsme:

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

Převod dílčího dotazu na připojení

První 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;

2. 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;

A je to, mnohem rychlejší pro tabulky s mnoha řádky

Původní odpověď:

Použijte not in . Podívejte se.

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

Upravit Přidal jsem odlišné, aby byl dotaz rychlejší

SQL Fiddle



  1. Trace Flag 2389 a nový odhad kardinality

  2. Session funguje správně v Localhost, ale ne v CPANEL

  3. Podpora Bool Oracle SQL

  4. Jak rozdělit transakce pouze pro čtení a čtení a zápis pomocí JPA a Hibernate