Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/08/2012, 04:27
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Update con Subconsulta

La consulta en sí, como dice @pcid, no contiene errores sintácticos, aunque si tiene algunos problemas y al menos un par de defectos.
Tu consulta es así:
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3. WHERE id_rutinter =
  4.     (SELECT id_rutinter
  5.     FROM
  6.         (SELECT
  7.             id_rutas,
  8.             id_ruta_destino,
  9.             ruta_intermedia,
  10.             id_rutinter, ord_visual
  11.         FROM rut_intermedia
  12.         WHERE
  13.             id_rutas = id_ruta_destino
  14.             AND id_rutas='$idrutas'
  15.             AND id_rutas_destino=$idrutas_destino
  16.             AND ord_visual=2) AS alias_rut_intermedia
  17.         )
- Hay un error base y es que estás tratando de hacer un UPDATE sobre la misma tabla que haces el subselect, cosa que MySQL no permite.

- Hay un error de diseño de la consulta, cuando realizas una subconsulta que devuelve cinco campos, y sobre esa haces otra para dejar uno... Eso no tiene sentido.
¿Por qué consultas un sólo campo en ese caso?
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3. WHERE id_rutinter =
  4.     (SELECT
  5.             id_rutinter
  6.      FROM rut_intermedia
  7.      WHERE
  8.             id_rutas = id_ruta_destino
  9.             AND id_rutas='$idrutas'
  10.             AND id_rutas_destino=$idrutas_destino
  11.             AND ord_visual=2
  12.       )
- El otro error conceptual es que si esa subconsulta se hace sobre la misma tabla que realizas el UPDATE, ¿para qué haces el SELECT? ¿Por qué no pones todo en el mismo UPDATE?
Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3.      d_rutas = id_ruta_destino
  4.      AND id_rutas='$idrutas'
  5.      AND id_rutas_destino=$idrutas_destino
  6.      AND ord_visual=2;
Me queda la duda de qué quisite relacionar con esto:
Cita:
d_rutas = id_ruta_destino
si los campos de la misma tabla, o los de la tabla en la subconsulta con la de la consulta mayor.

Finalmente: Por un lado te advierto que no se debe postear código de programación en este foro. Es OFF-TOPIC y genera confusiones porque a) esconde problemas generados por las variables que no sabemos si contienen datos o si tienen los correctos. b) No todos los que usamos MySQL programamos, ni programamos en PHP (PHP y MySQL son cosas independientes una de otra).

Lo que si puedo inferir es que @pcid tiene razón al suponer que la variable no contiene datos. En ese caso, si la variable $idrutas_destino estuviese vacía, lo que quedaría como consulta sería (usando el ultimo ejemplo):

Código MySQL:
Ver original
  1.     rut_intermedia
  2.     SET ruta_intermedia = '$rut_inter1'
  3.      d_rutas = id_ruta_destino
  4.      AND id_rutas='$idrutas'
  5.      AND id_rutas_destino=
  6.      AND ord_visual=2;
Y eso sí contiene un error sintáctico, no detectable en el codigo programado sino en la consulta construida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)