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.