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