SQL - consulta con dos tablas

 
Vista:
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 14:50:52
como estan

necesito una ayuda de como hacer de dos tablas la segunda tabla muestre el ultimo registro insertado

me explico.
en la primera tabla_1 tengo registrado datos que no se repiten, en la segunda tabla_2 tengo registrado datos que se repiten pero con incide con la primera tabla_1
ejemplo
tabla_1
cod1_nomProyecto_fechaInicio_montoContrato

tabla_2
cod2_cod1_fechaConclusion_modificacionMonto

en la tabla 2 se acumularan datos pero cod1 tendra relacion con la tabla_1 por su codigo

ahora como puedo hacer un SQL donde junte esas 2 tablas pero la tabla_2 solo me muestre el ultimo registro insertado
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 xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta con dos tablas

Publicado por xve (284 intervenciones) el 12/06/2012 15:08:49
Hola Jhean, no comentas que motor de base de datos estas utilizando...

haber si esto te puede servir... de todas maneras, no lo tengo muy claro...

SELECT * FROM tabla_1 t1
LEFT jOIN tabla_2 t2 ON
t1.cod1=t2.cod1
ORDER BY t2.fecha DESC
GROUP BY t1.cod1


Si no te funciona, comentame que creo que tengo un codigo de MySQL que te permite solucioar este problema.
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
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 16:55:02
como estas gracias por el apoyo.

trabajo en mi base de datos en MySQL

te xplico mis tablas tienen esto

tabla_1
cod1_nomProyecto_fechaInicio_montoContrato
1____asfalto______01/02/12__250000
2____limpieza_____02/03/12__10000
3____señales_____15/04/12__10000

tabla_2
cod2_cod1_fechaConclusion_modificacionMonto
4____1____01/10/12_______250000
5____2____20/12/12_______10000
6____2____30/12/12_______9500
7____3____03/06/12_______10000

y lo que quiero mostrar es esto de tabla_1 y tabla_2
cod1_nomProyecto_fechaInicio_montoContrato_fechaConclusion_modificacionMonto
1____asfalto______01/02/12__250000_______01/10/12_______250000
2____limpieza_____02/03/12__10000________30/12/12_______9500
3____señales_____15/04/12__10000________03/06/12_______10000

como veras del cod1 solo muestra el 2 muestra el ultimo registrado y se añade a la tabla
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta con dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 12/06/2012 18:06:22
Hola jhean carlos:

Hay varias maneras de llegar al mismo resultado, en lo particular creo que utilizando una subconsulta para obtener la fecha máxima para cada codigo y utilizando JOIN's es una de las mejores... sería más o menos así:

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
mysql> SELECT * FROM tabla_1;
+------+-------------+-------------+---------------+
| cod1 | nomProyecto | fechaInicio | montoContrato |
+------+-------------+-------------+---------------+
|    1 | asfalto     | 2012-02-01  |        250000 |
|    2 | limpieza    | 2012-03-02  |         10000 |
|    3 | señales     | 2012-04-15  |         10000 |
+------+-------------+-------------+---------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla_2;
+------+------+-----------------+-------------------+
| cod2 | cod1 | fechaConclusion | modificacionMonto |
+------+------+-----------------+-------------------+
|    4 |    1 | 2012-10-01      |            250000 |
|    5 |    2 | 2012-12-20      |             10000 |
|    6 |    2 | 2012-12-30      |              9500 |
|    7 |    3 | 2012-06-03      |             10000 |
+------+------+-----------------+-------------------+
4 rows in set (0.00 sec)
 
mysql> SELECT T1.*, T2.fechaConclusion, T2.modificacionMonto
    -> FROM tabla_1 T1
    -> INNER JOIN tabla_2 T2 ON T1.cod1 = T2.cod1
    -> INNER JOIN
    -> (SELECT MAX(fechaConclusion) fechaConclusion
    -> FROM tabla_2
    -> GROUP BY cod1) TM ON T2.fechaConclusion = TM.fechaConclusion;
+------+-------------+-------------+---------------+-----------------+-------------------+
| cod1 | nomProyecto | fechaInicio | montoContrato | fechaConclusion | modificacionMonto |
+------+-------------+-------------+---------------+-----------------+-------------------+
|    1 | asfalto     | 2012-02-01  |        250000 | 2012-10-01      |            250000 |
|    2 | limpieza    | 2012-03-02  |         10000 | 2012-12-30      |              9500 |
|    3 | señales     | 2012-04-15  |         10000 | 2012-06-03      |             10000 |
+------+-------------+-------------+---------------+-----------------+-------------------+
3 rows in set (0.00 sec)


Observa que la subconsulta que pongo TM obtiene la MAX(fechaConclusion) para cada cod1... de tal manera que utilizas este resultado para filtrar los registros.

dale un vistazo para ver si es lo que necesitas.

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
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 20:17:46
huy parece que funciona pero aun no me da ningun resultado

estoy utilizando el Navicat y me conecto a Mysql pero ese termino de TM no lo entiendo y tampoco me da el resultado al generar el SQL
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
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 20:27:01
ahora si que me rraye tambien no lo entiendo TI y T2 que hacen esos terminos asi lo denominaste tabla_1 y tabla_2.
estoy perdido
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta con dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 12/06/2012 21:06:50
Hola de nuevo jhean carlos:

Por tus comentarios veo que eres bastante novato en cuestiones de SQL... sería conveniente que leas primero cualquier manual para principiantes para entender mejor la sintaxis que estoy poniendo.

Te comento que T1, T2 y TM son ALIAS de las tablas que estoy utilizando en la consulta. Estos sirven para abreviar los nombres de las tablas, es decir, si no utilizara los alias T1 y T2 el select tendría que quedar así:

1
Tabla_1.*, Tabla_2.fechaConclusion, Tabla_2.modificacionMonto


En el caso de TM es un caso especial, ya que en realidad es un ALIAS de una subconsulta. Cuando utilizas subconsultas ES ABSOLUTAMENTE NECESARIO QUE LE ESPECIFIQUES UN ALIAS, en caso contrario la consulta simplemente no se ejecutará.

La consulta es válida para los datos que estás poniendo de prueba... si no estás llegando al resultado esperado es posible que tengas un problema con la información o con algún otro criterio que no mencionas en el Post.

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
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 22:51:50
ok super ya lo verifique en VFP ya me salio todo bien
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
sin imagen de perfil

consulta con dos tablas

Publicado por jhean carlos (13 intervenciones) el 12/06/2012 23:26:57
holas LEO

estava adaptando eso mismo con tres tablas como siempre el ultimo registrado de las dos tablas hice el codigo pero no me sale bien.

esta correcto lo que hice o no

son otros datos que aplique

SELECT T1.codigo_proyecto,T1.nombre_proyecto,T2.numero_contrato,T2.empresa_supervisor,T3.monto_actualizado,T3.avance_fisico_total,T3.avance_financiero_total,T1.estado_vigente_concluido
FROM registro_de_proyecto T1
WHERE T1.codigo_usuario=7
INNER JOIN registro_de_contrato T2 ON T1.codigo_proyecto = T2.cod_proyecto
INNER JOIN actualizacion_seguimiento_de_pagos T3 ON T1.codigo_proyecto = T3.codigo_proyecto
INNER JOIN
(SELECT MAX(fecha_actualizado) fecha_actualizado
FROM
registro_de_contrato
GROUP BY
cod_proyecto) TM ON T2.fecha_actualizado = TM.fecha_actualizado;
INNER JOIN
(SELECT MAX(fecha_actualizacion) fecha_actualizacion
FROM actualizacion_seguimiento_de_pagos
GROUP BY
codigo_proyecto) TM ON T3.fecha_actualizacion = TM.fecha_actualizacion;
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta con dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 13/06/2012 16:16:31
Hola de nuevo jhean carlos:

Nuevamente estás cometiendo errores de novato... Tienes que leer los fundamentos de SQL antes de intentar hacer cualquier consulta... De lo contrario vas a continuar cometiendo este tipo de errores infantiles.

Primero, la sección WHERE se debe colocar DESPUÉS DE LOS INNER JOIN.

1
2
3
4
5
SELECT....
FROM T1
INNER JOIN T2 ON .....
INNER JOIN (Select......) T3 ON .....
WHERE ......


Segundo, NO PUEDES UTILIZAR DOS ALIAS IGUALES para tus tablas o subconsultas... En tu query estás repitiendo el ALIAS TM para dos subconsultas... puedes poner CUALQUIER OTRA LETRA, NUMERO O COMBINACIÓN QUE SE TE OCURRA...

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

consulta con dos tablas

Publicado por anthony (1 intervención) el 14/04/2015 23:05:10
Leo,
llego tarde al tema(3años a mi parecer)
utilice tu consulta y esta perfecta en el caso que todos los cod1 esten registrados en el tabla2, el problema surge cuando no, ya que la subconsulta solo iguala a los codigos ingresados en la tabla 2, a primera vista si quieres mostrar los que no piensas en usar el left join pero no me salio.
leo tendras la forma de mostrar esos codigos que no se encuentren aun ingresados en la tabla2?
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