1
respuesta

[Sugerencia] Puede haber un error al ejecutar con el atributo, EDAD.

Mirar la tabla de clientes, hay 2 atributos FECHA_NACIMIENTO Y EDAD, hay que tener en cuenta que en la base de datos esta mal la edad, con respecto a la fecha del 2023, octubre, ya que la persona tiene 33 años y no 30 como aparece en la tabla. Erica nacio el 01/03/1990, entonces se deberia hacer una actualizacion de la edad, antes de ejecutar la rutina de los menores de 18 años, y despues ejecutar. DELETE FROM tb_facturas A INNER JOIN tb_clientes B ON A.DNI = B.DNI WHERE B.EDAD < 18; o la segunda opcion manejar el proceso de DELETE con la FECHA_NACIMIENTO y la fecha actual, calcular la diferencia en años entre las dos fechas, y ahi si aplicar a los que tienen menos de 18 años.

Otra sugerencia, sobra en la rutina del profe DELETE A FROM, debe ser DELETE FROM. Saludos, Rene Avila A., Bog, Col.

1 respuesta

¡Hola Rene!

Gracias por tu sugerencia. Para abordar esta situación, tienes dos opciones:

  1. Actualizar la columna EDAD en función de la FECHA_NACIMIENTO y luego eliminar las facturas de clientes menores de 18 años: Primero, actualiza la columna EDAD utilizando la diferencia entre la fecha actual (2023-10-23) y la FECHA_NACIMIENTO para cada cliente. Luego, elimina las facturas de clientes menores de 18 años. Esto se puede hacer con dos consultas SQL por separado.

Primero, actualiza la edad de los clientes:

UPDATE tb_clientes
SET EDAD = YEAR(CURDATE()) - YEAR(FECHA_NACIMIENTO) - IF(DATE_FORMAT(CURDATE(), '%m-%d') < DATE_FORMAT(FECHA_NACIMIENTO, '%m-%d'), 1, 0);

Luego, elimina las facturas de clientes menores de 18 años:

DELETE FROM tb_facturas
WHERE DNI IN (SELECT DNI FROM tb_clientes WHERE EDAD < 18);
  1. Calcular la edad en tiempo real al realizar la eliminación: En lugar de actualizar la columna EDAD, puedes calcular la edad en tiempo real al momento de realizar la eliminación de las facturas. Esto evita la necesidad de actualizar la columna EDAD. Puedes hacerlo de la siguiente manera:
DELETE FROM tb_facturas
WHERE DNI IN (SELECT DNI FROM tb_clientes WHERE TIMESTAMPDIFF(YEAR, FECHA_NACIMIENTO, CURDATE()) < 18);

En cuanto a tu observación sobre la sintaxis de DELETE, tienes razón. La sintaxis correcta es "DELETE FROM", no "DELETE A FROM". Gracias por señalarlo.

Un saludo.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios