MySQL - Duda consulta MySQL

 
Vista:

Duda consulta MySQL

Publicado por Daniel (2 intervenciones) el 21/02/2016 15:47:52
Buenas,

Estoy intentando hace una consulta en MySQL para clase que dice:

Cambiar el estado a "Almacenado" y poner los campos fec_hora_salida y num_trans a NULL para aquellos paquetes que a 31 de diciembre de 2015 llevaban en reparto más de 10 días.y dirigidos a cualquier provincia que comience por "M". (Realizar la operación en una única sentencia)

Me está constando bastante sobre todo la parte de enlazar la consulta con las provincias que empiezan por M. (Quizás, también me estoy equivocando en el resto).

Mi intento:

UPDATE PAQUETE SET estado='Almacenado', Fec_Hora_salida='NULL', Num_trans='NULL'
where estado IN (select estado from paquete where (HOUR(TIMEDIFF('2015-12-31 00:00:00', Fec_Hora_salida )) / 24)>10
and Fec_Hora_salida<'2015-12-31' and estado='en reparto')

y ahora, me quedaría enlazar :

select provincia from destinatario where provincia LIKE 'M%'

Pero ya no doy para más.

Alguna ayuda?

Gracias.
Daniel.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Duda consulta MySQL

Publicado por Gonzalo (103 intervenciones) el 22/02/2016 00:59:17
En primer lugar, tienes que entender (y tu profesor/a también), que MySQL no admite leer y escribir la misma tabla en la misma sentencia. Por consecuencia no puedes poner una subconsulta en un UPDATE a una tabla donde realices un SELECT a la misma tabla.
Simplemente te disparará un error de ejecución...

Por otro lado, tampoco lo necesitas.

Según lo que dices, lo que tiene que cumplir la query es:

1) Cambiar el estado a "Almacenado".
2) Poner los campos fec_hora_salida y num_trans a NULL para aquellos paquetes que:
a. Al 31 de diciembre de 2015 llevaban en reparto más de 10 días.
b. Dirigidos a cualquier provincia que comience por "M"
Ninguna de esas condiciones requiere una subconsulta.

Asumiendo que el ID de Destinatario fuese "destinatario_id", sería mas o menos así:

1
2
3
4
5
6
7
8
9
10
UPDATE PAQUETE p  INNER JOIN destinatario d ON p.destinatario_id = d.destinatario_id
SET
    p.estado = 'Almacenado',
    p.Fec_Hora_salida = NULL,
    p.Num_trans = NULL
WHERE
    UPPER(p.estado) = 'EN REPARTO'
    AND TIMESTAMPDIFF(DAY, p.Fec_Hora_salida, NOW())>10
    AND d.provincia LIKE 'M%'
    AND DATE(p.Fec_Hora_salida) < '2015-12-31';

Por cierto, ten en cuenta que una cadena de texto que diga "NULL", no es un NULL. No lo pongas entre apostrofos, "NULL" es un dato, y NULL es un estado. Son cosas diferentes.

Lee el manual de referencia para entender el uso de NULL. Tiene un capitulo entero dedicado al tema,

https://dev.mysql.com/doc/refman/5.5/en/problems-with-null.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda consulta MySQL

Publicado por Daniel (2 intervenciones) el 22/02/2016 19:21:21
Muchas gracias por tu ayuda.
Te lo agradezco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar