Pues estoy estudiando MySQL haciendo updates en una tabla, y no sé exactamente cuando usar inner join y cuando usar where.
Me he leído la teoría y he visto algunos ejemplos, pero no me queda claro las diferencias y cuando usar uno u otro.
Por ejemplo, en varios ejercicios que he hecho, he visto que podía llegar al mismo resultado de ambas formas, con la condición en el join y con una condición en el where, así que me he confundido incluso más.
En el siguiente ejercicio:
Rebaja en un 5% el precio de todos los productos que cuesten menos de 1000 € y cuyo nivel de existencias sea mayor del doble de la media de las existencias de todos los productos.
No sabría que usar, si inner join o un set con una condición where.
Para aclarar un poco más, pongo la primera parte de ejercicio:
Añadir una nueva tabla, llamada ejercicio31, a la BD Ventas. Esta nueva tabla contendrá los códigos de todos los productos existentes, sus precios y sus existencias, así como el número total de unidades vendidas
Creo que tendría que hacer un set en precio de la tabla ejercicio y una condición, que tampoco estoy seguro de cómo hacer. ¿O es mejor utilizar un join?
Perdonad por tanta parrafada. Y muchas gracias.
Tablas:
CREATE TABLE `producto` (
`IDPRODUCTO` varchar(6) NOT NULL,
`DESCRIPCION` varchar(15) NOT NULL,
`PRECIO` int DEFAULT NULL,
`EXISTENCIAS` int unsigned DEFAULT NULL,
PRIMARY KEY (`IDPRODUCTO`),
UNIQUE KEY `DESCRIPCION_UNIQUE` (`DESCRIPCION`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `ejercicio31` (
`CodProducto` varchar(6) NOT NULL,
`PRECIO` int DEFAULT NULL,
`Existencias` int DEFAULT NULL,
`CantidadVendido` int DEFAULT '0',
PRIMARY KEY (`CodProducto`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Lo que he probado:
update ejercicio31 e,
(
select avg(existencias) ex
from ejercicio31
) e2
set precio = precio * 0.95
where existencias > e2.ex * 2;