SQL - Ayuda con una consulta update

   
Vista:

Ayuda con una consulta update

Publicado por Derhelm (1 intervención) el 04/07/2012 12:51:30
Hola amigos, a ver si alguien pudiera ayudarme.

Tengo 2 tablas DIRECCIONES y DIRECCIONES_CUALIFICACION, y necesito actualizar un campo de DIRECCIONES llamado COD_DIRECCION_ORIGEN con el COD_DIRECCION de DIRECCIONES_CUALIFICACION para aquellas filas en los que coincida la VIA.

UPDATE DIRECCIONES
SET COD_DIRECCION_ORIGEN=COD_DIRECCION
WHERE EXISTS (SELECT COD_DIRECCION
FROM DIRECCIONES_CUALIFICACION
WHERE VIA IN (SELECT VIA FROM DIRECCIONES WHERE VIA IS NOT NULL));

Ambas tablas tienen como clave el COD_DIRECCION, por lo que quiero que el valor que actualize el campo COD_DIRECCION_ORIGEN sea el COD_EMPRESA de la tabla DIRECCIONES_CUALIFICACION

A ver si alguien puede ayudarme. Saludos
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

Ayuda con una consulta update

Publicado por leonardo_josue (878 intervenciones) el 04/07/2012 17:37:45
Hola Derhelm:

No nos dices qué BD estás utilizando, lo que complica las cosas al no poder darte una respuesta puntual... Te recuerdo que aunque todos los DBMS utilizan SQL como lenguaje de consultas, tienen diferencias significativas en la sintaxis. Por lo pronto te pongo un ejemplo de cómo podrías hacerlo con MySQL. Supongamos que tienes dos tablas así;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM tablaA;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | two         |
|    3 | tres        |
|    4 | Quatro      |
+------+-------------+
4 rows in set (0.00 sec)
 
mysql> SELECT * FROM tablaB;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    2 | dos         |
|    4 | cuatro      |
|    5 | cinco       |
+------+-------------+
3 rows in set (0.00 sec)


Supongamos que queremos actualizar la TablaA a partir de los datos de la TablaB. De inicio, podríamos obtener una lista de los datos que se tienen que actualizar, haciendo algo como esto:

1
2
3
4
5
6
7
8
mysql> SELECT * FROM TablaA INNER JOIN TablaB ON TablaA.id = TablaB.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    2 | two         |    2 | dos         |
|    4 | Quatro      |    4 | cuatro      |
+------+-------------+------+-------------+
2 rows in set (0.00 sec)


De aquí se desprende que sólo los id's 2 y 4 se tienen que actualizar. En MySQL (y otros motores de BD) podrías hacer algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> UPDATE tablaA, tablaB
    -> SET TablaA.descripcion = TablaB.descripcion
    -> WHERE TablaA.id = TablaB.id;
Query OK, 2 rows affected (0.08 sec)
Rows matched: 2  Changed: 2  Warnings: 0
 
mysql> SELECT * FROM tablaA;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
|    4 | cuatro      |
+------+-------------+
4 rows in set (0.00 sec)


Podrías intentar hacer lo mismo, es decir a partir de una consulta SELECT que te arroje los resultados que quieres actualizar, convertirla a su equivalente UPDATE. Checa si la BD que estás utilizando soporta este tipo de actualizaciones y si continuas con problemas nos lo comentas, PERO DINOS CON QUÉ BD ESTÁS TRABAJANDO.

Saludos
Leo.
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