Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda consulta anidada update+select

Estas en el tema de Duda consulta anidada update+select en el foro de Bases de Datos General en Foros del Web. Hola, me estoy peleando con una consulta y no se donde está el error. La consulta es esta: UPDATE historic_carrecs SET finalitzat = 'si' WHERE ...
  #1 (permalink)  
Antiguo 21/04/2009, 04:48
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 8 meses
Puntos: 8
Duda consulta anidada update+select

Hola, me estoy peleando con una consulta y no se donde está el error. La consulta es esta:

UPDATE historic_carrecs SET finalitzat = 'si' WHERE idCarrec IN (SELECT h.idCarrec, h.data_fi, c.codi, h.finalitzat FROM historic_carrecs as h, carrecs as c WHERE h.finalitzat = 'no' AND c.codi = h.idCarrec AND h.data_fi <= now())


La primera pregunta sería si la sintaxis está bien. A partir de ahí... lo que quiero hacer es: El select me devuelve una serie de registros, lo que quiero hacer es actualizar la tabla "historic_carrecs" que tenga su campo "idCarrec" dentro de los registros del Select.

¿Álguien ve algo?

Muchas gracias.
  #2 (permalink)  
Antiguo 21/04/2009, 08:05
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 9 meses
Puntos: 18
Respuesta: Duda consulta anidada update+select

La select por si sola funciona???

Prueba asi:

UPDATE historic_carrecs SET finalitzat = 'si' WHERE idCarrec IN (SELECT h.idCarrec FROM historic_carrecs as h, carrecs as c WHERE h.finalitzat = 'no' AND c.codi = h.idCarrec AND h.data_fi <= now())

Un saludo
  #3 (permalink)  
Antiguo 21/04/2009, 09:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 6 meses
Puntos: 2658
Respuesta: Duda consulta anidada update+select

El error consiste en que la subconsulta debe forzosamente devolver un sólo campo y estás devolviendo tres.
Si lo que deseas es comparar un id de una tabla contra los id existentes en otra, y actualizar la primera tabla, lo que debes es usar el JOIN en el UPDATE:
Código sql:
Ver original
  1. UPDATE historic_carrecs h
  2.     INNER JOIN carrecs c ON h.idCarrec=c.codi
  3. SET finalitzat = 'si'
  4. WHERE h.finalitzat = 'no' AND h.data_fi <= NOW();
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 21/04/2009, 11:31
 
Fecha de Ingreso: abril-2009
Mensajes: 10
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Duda consulta anidada update+select

gnzsoloyo, me habia metido para contestar exactamente lo que has contestado tu ;)

Esa elegancia al usar un inner join en un update, ya no enseñan SQL como antes jaja
  #5 (permalink)  
Antiguo 22/04/2009, 04:45
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 8 meses
Puntos: 8
Respuesta: Duda consulta anidada update+select

Muchas gracias gnzsoloyo, de todas formas, hize mi consulta devolviendo un solo campo y no funcionaba. ¿Sabes por qué?
  #6 (permalink)  
Antiguo 22/04/2009, 06:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 6 meses
Puntos: 2658
Respuesta: Duda consulta anidada update+select

La única posibilidad es que no haya un registro que cumpla al mismo tiempo h.finalitzat = 'no' y h.data_fi <= NOW().
Para ver si hay alguno, haz un SELECT:
Código sql:
Ver original
  1. SELECT *
  2. FROM historic_carrecs h INNER JOIN carrecs c ON h.idCarrec=c.codi
  3. WHERE h.finalitzat = 'no' AND h.data_fi <= NOW();
Si esto no devuelve nada, entonces prueba esto:
Código sql:
Ver original
  1. SELECT *
  2. FROM historic_carrecs h LEFT JOIN carrecs c ON h.idCarrec=c.codi
  3. WHERE h.finalitzat = 'no' AND h.data_fi <= NOW();
Esto te devovlerá una tabla con los campos que no coinciden de la segunda tabla en NULL.
Mira si hay coincidencias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/04/2009, 03:59
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 8 meses
Puntos: 8
Respuesta: Duda consulta anidada update+select

Muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:03.