Actualizado: Deberíamos usar preferir usar uniones para un mejor rendimiento cuando es fácil de hacer para nosotros. Unirse vs. subconsulta
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;
Nota:Cambié el nombre de la columna cliente para t3 porque dos tablas unidas deben tener nombres de columna diferentes
Explicación:
El uso de consultas internas o secundarias es costoso cuando tiene grandes datos. use uniones en su lugar, aprendamos a convertir subconsultas en uniones
Con Subconsulta Tuvimos:
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'));
Conversión de subconsulta para unirse
Primer paso:
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;
2do paso:
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;
Y eso es todo, mucho más rápido para tablas que tienen numerosas filas
Respuesta original:
Usar not in
. Echa un vistazo.
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'));
Editar He agregado distintivo para que la consulta sea más rápida