sql >> Database >  >> RDS >> Mysql

WHERE value IS NOT IN (subquery)

Bijgewerkt: We zouden de voorkeur moeten geven aan het gebruik van joins voor betere prestaties wanneer dit voor ons gemakkelijk te doen is. Deelnemen versus subquery

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;

Opmerking:ik heb de kolomnaam klant gewijzigd voor t3 omdat twee samengevoegde tabellen verschillende kolomnamen moeten hebben

Uitleg:

Het gebruik van inner- of subquery's is duur als je big data hebt. gebruik in plaats daarvan joins, laten we leren om subquery's te converteren om mee te doen

Met Subquery We hadden:

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

Subquery converteren om deel te nemen

Eerste stap:

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;

2e stap:

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;

En dat is het, veel sneller voor tabellen met meerdere rijen

Oorspronkelijke antwoord:

Gebruik not in . Kijk eens.

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

Bewerken Ik heb onderscheiden toegevoegd om zoekopdrachten sneller te maken

SQL Fiddle



  1. Hoe kan ik mijn MySQL-log starten en controleren?

  2. Laravel-project ERR_EMPTY_RESPONSE

  3. Hoe de functie Radians() werkt in PostgreSQL

  4. Hoe zou ik deze matrixstructuur in een HTML-vorm maken?