Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/09/2008, 20:44
karoljose
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 9 meses
Puntos: 0
Como funcionan estos NOT EXISTS???

Artículos que se han vendido en todas las sucursales.

Solución:

SELECT Nombre
FROM Articulos
WHERE NOT EXISTS( SELECT 1 FROM Sucursales
WHERE NOT EXISTS (SELECT 1
FROM Ventas
WHERE Sucursal=Sucursales.Id
AND Articulo=Articulos.Id))
ORDER BY 1;


No entiendo como el mysql internamente me devuelve todos los articulos que se vendieron en todas las sucursales.

Lo que se trata de lograr podría expresarse así :
SELECCIONAR Nombre
DE Articulos
CUANDO PARA TODA Sucursal
EXISTE Venta de Articulo en Sucursal.

El problema es " CUANDO PARA TODA Sucursal..." que no tiene una traducción directa a MySQL, ni a ningún SQL que yo conozca. Pero esta expresión es equivalente a "NO EXISTE Sucursal TAL QUE NO...". Es decir, afirmar que algo se cumple para todas las Sucursales equivale a afirmar que no existe una región para la que no se cumpla. Resultaría :

SELECCIONAR Nombre
DE Articulos
CUANDO NO EXISTE Sucursal TAL QUE
NO EXISTE Venta de Articulo en Sucursal.