SQL - corregir SQL

   
Vista:

corregir SQL

Publicado por jhean carlos (13 intervenciones) el 12/12/2013 23:01:58
como estan

no me corre esta consulta tengo 2 tablas del que una tiene datos unicos que no se repiten

tabla SELECT_1
id.......opcion
1........cochabamaba
2........beni
3........tarija

en la otra tabla tengo que se repiten o se guardan datos para que no se pierdan se ven en el (id) de las dos tablas

tabla GERENTE_REGIONAL
cod_gerente......id.......gestion
10........................1........2013
11........................2........2013
13........................2........2013
15........................3........2013

lo que quiero sacar es una relacion de las dos tablas en la que solo tenga una información que no se repita y solo tomar de la segunda tabla el ultimo registrado

aca mi codigo no me resulta que error tengo?

SELECT T1.id,T1.opcion,T2.nombre
FROM select_1 T1
INNER JOIN gerente_regional T2 ON T1.id=T2.id
INNER JOIN
(SELECT MAX (cod_gerente) cod_gerente
FROM
gerente_regional
GROUP BY id) TM ON T2.cod_gerente = TM.cod_gerente;
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
Imágen de perfil de Isaias

corregir SQL

Publicado por Isaias (690 intervenciones) el 13/12/2013 19:19:26
En tu ejemplo, no veo donde esta la REPETCION de registros...
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

corregir SQL

Publicado por jhean carlos (13 intervenciones) el 13/12/2013 19:52:51
tabla SELECT_1
id.......opcion
1........cochabamaba
2........beni
3........tarija


tabla GERENTE_REGIONAL
cod_gerente......id.......gestion..monto
10........................1........2013......200
11........................2........2013......150
13........................2........2013......350
15........................3........2013......600

perdon quiero que salga asi la respuesta

id.......opcion................gestion......monto
1........cochabamaba..2013..........200
2........beni....................2013...........350
3........tarija...................2013...........600

pero mi SQL me sale error pero no se que?

SELECT T1.id,T1.opcion,T2.gestion,T2.monto
FROM select_1 T1
INNER JOIN gerente_regional T2 ON T1.id=T2.id
INNER JOIN
(SELECT MAX (cod_gerente) cod_gerente
FROM
gerente_regional
GROUP BY id) TM ON T2.cod_gerente = TM.cod_gerente;
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

corregir SQL

Publicado por leonardo_josue (877 intervenciones) el 13/12/2013 21:48:57
Hola jhean carlos:

A simple vista, la consulta no tiene ningún error, ¿qué error te marca el motor de BD? lo único que veo al copiar tu código es que tienes un espacio entre MAX y el paréntesis... pero en realidad la consulta funciona según lo que deseas, (al menos en MySQL)... no nos dices con qué BD estás trabajando, el error puede ser entonces por el motor en sí:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
mysql> SELECT * FROM SELECT_1;
+------+-------------+
| id   | opcion      |
+------+-------------+
|    1 | cochabamaba |
|    2 | beni        |
|    3 | tarija      |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM GERENTE_REGIONAL;
+-------------+------+---------+-------+
| cod_gerente | id   | gestion | monto |
+-------------+------+---------+-------+
|          10 |    1 |    2013 |   200 |
|          11 |    2 |    2013 |   150 |
|          13 |    2 |    2013 |   350 |
|          15 |    3 |    2013 |   600 |
+-------------+------+---------+-------+
4 rows in set (0.00 sec)
 
mysql> SELECT T1.id,T1.opcion,T2.gestion,T2.monto
    -> FROM select_1 T1
    -> INNER JOIN gerente_regional T2 ON T1.id=T2.id
    -> INNER JOIN
    -> (  SELECT MAX(cod_gerente) cod_gerente
    ->    FROM
    ->       gerente_regional
    ->    GROUP BY id
    -> ) TM ON T2.cod_gerente = TM.cod_gerente;
+------+-------------+---------+-------+
| id   | opcion      | gestion | monto |
+------+-------------+---------+-------+
|    1 | cochabamaba |    2013 |   200 |
|    2 | beni        |    2013 |   350 |
|    3 | tarija      |    2013 |   600 |
+------+-------------+---------+-------+
3 rows in set (0.00 sec)

Lo único que tengo es una observación con respecto a la subconsulta... esto igual y puede ser que no te afecte, todo depende de cómo tienes tu información, pero en lo general este tipo de consultas lo tienes que hacer ligando no solo el MAX(campo), sino también el campo por el que estás agrupando... es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT id, MAX(cod_gerente) cod_gerente
    -> FROM
    ->    gerente_regional
    -> GROUP BY id;
+------+-------------+
| id   | cod_gerente |
+------+-------------+
|    1 |          10 |
|    2 |          13 |
|    3 |          15 |
+------+-------------+
3 rows in set (0.00 sec)

y en la cláusula ON del INNER JOIN, también consideras este campo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT T1.id,T1.opcion,T2.gestion,T2.monto
    -> FROM select_1 T1
    -> INNER JOIN gerente_regional T2 ON T1.id=T2.id
    -> INNER JOIN
    -> (  SELECT id, MAX(cod_gerente) cod_gerente
    ->    FROM
    ->       gerente_regional
    ->    GROUP BY id
    -> ) TM ON T2.cod_gerente = TM.cod_gerente AND T2.id = TM.id;
+------+-------------+---------+-------+
| id   | opcion      | gestion | monto |
+------+-------------+---------+-------+
|    1 | cochabamaba |    2013 |   200 |
|    2 | beni        |    2013 |   350 |
|    3 | tarija      |    2013 |   600 |
+------+-------------+---------+-------+
3 rows in set (0.00 sec)

Esto debes hacerlo si por ejemplo tu campo id_cod_gerente puede repetirse para distintos ID's... pero te repito, en realidad esto no es necesario si tu campo es una secuencia o un consecutivo.

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
1
Comentar

corregir SQL

Publicado por jhean carlos (13 intervenciones) el 13/12/2013 22:08:55
LA VERDAD NO SE QUE PASO ESTOY CON MYSQL Y NAVICAT PERO YA FUNCIONA BIEN PERO QUE RRARO QUE NO FUNCIONO PARA NADA ANTES

PERO TODO OK GRACIAS!!
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