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

Update Set Select

Estas en el tema de Update Set Select en el foro de Bases de Datos General en Foros del Web. Tengo dos tablas: - Tabla1: nombre de usuario y más info (clave primera username+otro campo). - Tabla2: id de usuario (clave primaria), nombre de usuario ...
  #1 (permalink)  
Antiguo 08/04/2005, 03:05
Avatar de peaso  
Fecha de Ingreso: enero-2002
Ubicación: Barcelona
Mensajes: 147
Antigüedad: 22 años, 3 meses
Puntos: 0
Update Set Select

Tengo dos tablas:

- Tabla1: nombre de usuario y más info (clave primera username+otro campo).
- Tabla2: id de usuario (clave primaria), nombre de usuario e info del usuario.

Quiero cambiar la tabla 1, para que en lugar del nombre del usuario se guarde el id del usuario.

La sentencia SQL sería del estilo a la siguiente:

Código:
UPDATE tabla1 SET username = 
(SELECT userid FROM tabla2 WHERE tabla2.username = tabla1.username)
En teoría debería funcionar, pero me da un error de sintaxis "cerca de SELECT userid FROM tabla2 WHERE tabla2.username = tabla1...".

¿Alguna idea?
  #2 (permalink)  
Antiguo 08/04/2005, 10:35
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 9 meses
Puntos: 7
hola peaso...
prueba con

Código PHP:
UPDATE tabla1 SET username 
(
SELECT userid FROM tabla1tabla2 WHERE tabla2.username tabla1.username
Chaop!
  #3 (permalink)  
Antiguo 08/04/2005, 12:38
Avatar de peaso  
Fecha de Ingreso: enero-2002
Ubicación: Barcelona
Mensajes: 147
Antigüedad: 22 años, 3 meses
Puntos: 0
Negativo. Sigue fallando lo mismo: error de sintaxis.
  #4 (permalink)  
Antiguo 08/04/2005, 14:08
 
Fecha de Ingreso: julio-2003
Ubicación: Colombia
Mensajes: 591
Antigüedad: 20 años, 9 meses
Puntos: 7
Bueno por otro lado la consulta


Código PHP:
SELECT userid FROM tabla1tabla2 WHERE tabla2.username tabla1.username 
te arroja un juego de resultados... no entiendo que quieres hacer con Update?

En realidad la consulta para hacer el Update efectivo, deberia arrojar un solo registro...

Chaop!
  #5 (permalink)  
Antiguo 09/04/2005, 19:43
Avatar de Game[DxS]  
Fecha de Ingreso: noviembre-2003
Ubicación: Concepción Chile
Mensajes: 100
Antigüedad: 20 años, 5 meses
Puntos: 0
haz primero el select, y dependiendo del resultado ke arroje, haces el update ...

por ejemplo:

select id from tabla1


despues

update table2 set nombre='algo' where id = 'id_de_la_consulta_1'
  #6 (permalink)  
Antiguo 11/04/2005, 09:32
Avatar de peaso  
Fecha de Ingreso: enero-2002
Ubicación: Barcelona
Mensajes: 147
Antigüedad: 22 años, 3 meses
Puntos: 0
@Game: es que me interesaría hacerlo automaticamente, porque hacer a mano más de 25000 registros... ;)

@luchope: el problema es actualizar una tabla (tabla1) con cierta información de un registro de la tabla2 que hace matching con el que quiero actualizar de la tabla1


En definitiva, creo que ésto no se puede hacer con sólo una sentencia SQL :(
  #7 (permalink)  
Antiguo 11/04/2005, 09:58
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
¿qué gestor de bases de datos usas?. Si estás usando mysql con una versión inferior a la 4.1 no podrás usar las subconsultas, con lo que se te complicará el asunto.
__________________
Estoy contagiado de Generación-I
  #8 (permalink)  
Antiguo 11/04/2005, 10:26
Avatar de peaso  
Fecha de Ingreso: enero-2002
Ubicación: Barcelona
Mensajes: 147
Antigüedad: 22 años, 3 meses
Puntos: 0
Por eso no hay problema:

MySQL 4.1.8
  #9 (permalink)  
Antiguo 11/04/2005, 10:36
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Pues la primera consulta que pusiste debería ser totalmente correcta, no le veo ningún problema para que funcione, salvo limitaciones de mysql en el uso de subqueries.
¿El mensaje de error que pusiste al principio es totalmente completo?.
__________________
Estoy contagiado de Generación-I
  #10 (permalink)  
Antiguo 11/04/2005, 19:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 81
Antigüedad: 19 años, 1 mes
Puntos: 0
Cita:
Iniciado por peaso
@Game: es que me interesaría hacerlo automaticamente, porque hacer a mano más de 25000 registros... ;)

@luchope: el problema es actualizar una tabla (tabla1) con cierta información de un registro de la tabla2 que hace matching con el que quiero actualizar de la tabla1


En definitiva, creo que ésto no se puede hacer con sólo una sentencia SQL :(

Si estas usando SQL server si se puede


Update tabla1
set campo1 = t2.campo1
from tabla1 t1, tabla2 t2
where t1.campoX = t2.campoX


Última edición por ChadX; 11/04/2005 a las 19:53
  #11 (permalink)  
Antiguo 12/04/2005, 01:02
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Mirando la documentación acabo de ver que con el mysql se hace de una forma similar a como lo ha puesto ChadX en sql server:
Código:
UPDATE tabla1, tabla2
 SET username = tabla2.userid
WHERE tabla2.username = tabla1.username
De todas formas, la forma inicial tendría que ser totalmente correcta, al menos en otros gestores como oracle e informix funciona perfectamente.
Un saludo.
__________________
Estoy contagiado de Generación-I
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 17:32.