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

Update con resultado de otra tabla

Estas en el tema de Update con resultado de otra tabla en el foro de Mysql en Foros del Web. muy buenas, Estoy intentado actualizar una tabla en mysql de esta manera UPDATE tabla SET tabla.campo = select indice from tabla 2 where comp = ...
  #1 (permalink)  
Antiguo 02/01/2014, 06:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Update con resultado de otra tabla

muy buenas,
Estoy intentado actualizar una tabla en mysql de esta manera

UPDATE tabla
SET
tabla.campo = select indice from tabla 2 where comp = 1

Que estoy haciendo mal? Ya que me sale un error de sintaxis.

Saludos
  #2 (permalink)  
Antiguo 02/01/2014, 06: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: 17 años
Puntos: 2658
Respuesta: Update con resultado de otra tabla

Por empezar, que un alias (como los nombres de cualquier objeto de BBDD) no pueden ser números, ni comenzar por números.
Luego, que debes asegurarte de que el subselect devuelva un único registro.
Además, hay modos más adecuados usando JOINS.

Finalmente: Te recomiendo usar el buscador del foro, porque se han tratado temas así muchas veces. Encontrarás muchas explicaciones interesantes y ejemplos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/01/2014, 16:00
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Respuesta: Update con resultado de otra tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por empezar, que un alias (como los nombres de cualquier objeto de BBDD) no pueden ser números, ni comenzar por números.
Si bueno lo de tabla 2 lo he puesto para que se viera que era una tabla diferente, no tiene ningun numero.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Luego, que debes asegurarte de que el subselect devuelva un único registro.
Si si la subselect revuelve un unico campo
Cita:
Iniciado por gnzsoloyo Ver Mensaje
Además, hay modos más adecuados usando JOINS.
Hace falta hacer un Join para un update tan simple?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Finalmente: Te recomiendo usar el buscador del foro, porque se han tratado temas así muchas veces. Encontrarás muchas explicaciones interesantes y ejemplos.
Antes de preguntar he buscado y supongo que es algo tan simple que no hay ni ejemplos.

Gracias por eso
  #4 (permalink)  
Antiguo 02/01/2014, 17:39
Avatar de 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
Puntos: 2658
Respuesta: Update con resultado de otra tabla

Cita:
Si bueno lo de tabla 2 lo he puesto para que se viera que era una tabla diferente, no tiene ningun numero.
Las consultas imaginarias o supuestas, habitualmente redundan en diagnósticos imaginarios o falsos.
Postea los nombres de los objetos reales, tal y como son. Todo lo que omitas o generalices nos llevará a darte consejos equivocados. No supongas que por que tú sabes de lo que hablas nosotros también lo hacemos. Las generalizaciones omiten datos importantes para el análisis.
Cita:
Hace falta hacer un Join para un update tan simple?
¿Qué te hace suponer que una consulta debe ser "compleja" para necesitar solucionarse con un JOIN?
Un JOIN se usa cuando debe usarse, es decir cuando hay una relación real entre dos o más tablas. Que sea simple o complejo es relativo. Cuando haces la consulta de la forma que la planeaste estás haciéndola ineficiente, lo que es peor que hacerla compleja.
Cita:
Antes de preguntar he buscado y supongo que es algo tan simple que no hay ni ejemplos.
Hay decenas de posts preguntando el mismo tema. La clave es tener práctica para lograr obtener de los buscadores la respuesta que estás bsucando.
Yo mismo respondí dos veces posts similares en esta última semana... Pero dado que suelo responder muchos, no estoy seguro de cuál fue el último.

Yendo al caso, lo tuyo es tan sencillo como:
Código MySQL:
Ver original
  1. UPDATE tablaA, tablaB
  2. SET TablaA.campo = tablaB.campo
  3. WHERE condiciones;
Pero este tipo de JOIN tiene como condición que bede existir una relación entre el registro a actualizar de la primera tabla y el registro de la segunda.

En el caso de lo que propones tu, tiene un prblema básico:
Código MySQL:
Ver original
  1. UPDATE tabla
  2. tabla.campo = select indice from tabla 2 where comp = 1
Tiene dos problemas:
1) Necesita paréntesis para encerrar el resultado de la subconsulta.
2) Como no hay un discriminante de la tabla afectada por el UPDATE, se haría un UPDATE de todos y cada uno de los registros de la primera tabla con ese único registro de la segunda.
Yo a eso no le veo sentido.
Código MySQL:
Ver original
  1. UPDATE tabla
  2. tabla.campo = (select indice from tabla 2 where comp = 1)
Postea la consulta real que estás usando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/01/2014, 02:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Respuesta: Update con resultado de otra tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje

Yendo al caso, lo tuyo es tan sencillo como:
Código MySQL:
Ver original
  1. UPDATE tablaA, tablaB
  2. SET TablaA.campo = tablaB.campo
  3. WHERE condiciones;
Pero este tipo de JOIN tiene como condición que bede existir una relación entre el registro a actualizar de la primera tabla y el registro de la segunda.
[/B]
Gracias por contestar tan rapido, he probado lo que tu me dices y no me funciona, entre las 2 tablas no existe relacion. Lo que quiero es actualizar el campo de una tabla con el resultado de otra select. La subconsulta lo he echo a parte y me devuelve un string.
Pongo la consulta real para que no haya confusión.
Código MySQL:
Ver original
  1. UPDATE concesionario
  2. SET concesionario.marca = (select marca from conc_competidores where competidores = 1)

Hago esto porque lo tengo puesto en un proceso automatico, la subconsulta conc_competidores devolvera diferentes valores segun el mes, necesito que se me actualize la tabla concesionario con ese campo.

No se si me he explicado bien, haber si lo puedo conseguir.
  #6 (permalink)  
Antiguo 03/01/2014, 02:43
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Respuesta: Update con resultado de otra tabla

Gracias ya lo he solucionado he tenido que poner un alias a la tabla, yo pensaba que esto de poner alias es algo opcional

UPDATE concesionario con
SET
con.marca = (select marca from comp_concesionario where competidor = 0)
  #7 (permalink)  
Antiguo 03/01/2014, 05:46
Avatar de 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
Puntos: 2658
Respuesta: Update con resultado de otra tabla

Los alias no son opcionales cuando manipulas tablas que tienen campos con el mismo nombre, los cuales estás usando en la consulta.
El DBMS no puede adivinar a cuál tabla pertenece el campo, a menos que se lo indiques específicamente, ya que en ese contexto el nombre es insuficiente.
Precisamente por eso es que debes postear las consultas reales. Al generalizarla cambiando los nombres no había forma de saber que eso estaba pasando.
Por otro lado, en ese contexto no debe haberte dado un error de sintaxis, sino un error de columna ambigua, lo que era una mejor pista.
Recuerda siempre postear el mensaje textual que te está devolviendo. Decir "me da un error" la mayoría de las veces no alcanza para saber cuál es el error.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, resultado, select, sql, tabla, update
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 13:53.