SQL - Consulta de 2 tablas

   
Vista:

Consulta de 2 tablas

Publicado por roberto (12 intervenciones) el 25/11/2014 18:05:52
Buenas Tardes,

Me presento, soy nuevo en este foro.


Tengo el siguiente dilema, quiero hacer un tipo de buscarv, resulta que tengo las siguientes tablas:

(1)Nombre Tabla:
CRED_LINEA_CREDITO
Campos
CRED_NRUT
CRED_CLIN_CRED

(2)Nombre Tabla
MVLC_MOV_LIN_CRED
Campos
MVLC_CAGENCIA
TIPM_CTIPO_MOV

Resulta que el único campo que coinciden las datos son : CRED_NRUT(de la tabla CRED_LINEA_CREDITO) y MVLC_NRUT_AFIL (de la tabla MVLC_MOV_LIN_CRED)


Hice lo siguiente para que me trajera :

SELECT CRED_NRUT, CRED_XAFIL_EMP, CRED_CLIN_CRED
FROM CRED_LINEA_CREDITO JOIN MVLC_MOV_LIN_CRED
ON CRED_LINEA_CREDITO.CRED_NRUT = MVLC_MOV_LIN_CRED.MVLC_NRUT_AFIL

Esperando de su ayuda y compresión

**** seria facil sacar el datos de las dos tablas y luego hacer un coincidir o buscarv, pero son mas de 2 millones de registro(es una empresa de sistema privado de salud)
***Comento que no soy administrador ni nada para agregar o eliminar alguna fila o modificar algún campo o tabla, es solo de consulta, ya que trabajo para un empresa grande.
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

Consulta de 2 tablas

Publicado por leonardo_josue (877 intervenciones) el 25/11/2014 21:33:56
Hola Roberto:

¿Cuál es en realidad tu problema? es decir, con lo que posteas en realidad no mencionas qué error, problemática o situación estás enfrentando. Tampoco me queda claro a qué te refieres con un tipo de buscarv... te recomiendo que seas un poco más descriptivo en tu problema.

Con lo que pones en tu post, te puedo comentar que la manera en que haces la unión de las tablas es decir, utilizando JOIN's, es la mejor y más óptima forma de hacerlo, por lo tanto en esa parte no hay mucho que puedas mejorar. El único cuidado sería verificar que los campos de las tablas sean índices, para mejorar el rendimiento. Sin embargo, dado que mencionas que no eres administrador de la BD's entonces tampoco hay mucho que hacer en ese aspecto.

Insisto, trata de explicar mejor qué problema tienes: si hay algún error en la consulta, dinos cual es el error. Si el problema es lentitud, entonces da más detalles al respecto, si no estás obteniendo el resultado esperado, entonces dinos qué es lo que estás obteniendo y qué es lo que esperas obtener. Entre más detalles nos des, más factible será tratar de ayudarte.

también menciona con qué BD's estás trabajando, esto es muy importante, pues hay diferencias sintácticas entre todos los DBMS's.

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

Consulta de 2 tablas

Publicado por roberto (12 intervenciones) el 26/11/2014 17:55:38
Muchas Gracias por su pronta respuesta, tiene razón en todo, en síntesis quiero que solo me traiga los datos de una tabla, no de las dos tablas aunque cumpla los mismos requisitos.(lamento los "-------", pero son para que se vea como una tabla y separar los campos y no se vea todo junto)

Un Ejemplo.

Tabla : CRED_LINEA_CREDITO
Campos : A1--------------------A2-----------------A3------A4
--------------17739623----------444332002-----E------5
--------------18523133----------672432011-----E------6
--------------154554554--------716522012------ E------5

Tabla: MVLC_MOV_LIN_CRED
Campos : B1-----------------------------B2
--------------17739623----------------ALMAGRO 1422
--------------17739623----------------ANTON 9999

--------------18523133----------------OPAASO 1992
--------------154554554--------------CASTAÑO 7422


Realizo el siguiente codigo:

1
Select R1.A1,E1.A4,R2.B2  From CRED_LINEA_CREDITO R1,MVLC_MOV_LIN_CRED R2 Where R1.A1=A2.R2.B1


Resultado:

todo unido respecto al A1 de la tabla CRED_LINEA_CREDITO y MVLC_MOV_LIN_CRED

Resultado esperado

1
A1---------------A4------B2

17739623------5----ALMAGRO 1422
18523133------6-----OPAASO 1992
154554554-----5------CASTAÑO 7422



Necesito que el SQL, me traiga solo los datos que le consulto de la tabla CRED_LINEA_CREDITO, y no repetidos, como en el ejemplo de arriba, el A1= 17739623 en la tabla MVLC_MOV_LIN_CRED , tenia dos registro, pero lo que necesito que solo me traiga uno
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

Consulta de 2 tablas

Publicado por leonardo_josue (877 intervenciones) el 26/11/2014 21:38:36
Hola de nuevo Roberto:

¿Qué criterio utilizas para decir cuál de los registros de tu tabla 2 debe aparecer?, es decir, en tu tabla tienes estos valores para el mismo id

1
2
--------------17739623----------------ALMAGRO 1422
--------------17739623----------------ANTON 9999

Pero no nos dices si hay alguna razon en especial para decir que en tu salida ponga el primero y no el segundo. Los motores de BD's, no tienen capacidad de elección, esto quiere decir que tienes que colocar por tu cuenta los criterios necesarios para seleccionar o excluir un registro. Observa este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mysql> SELECT * FROM CRED_LINEA_CREDITO;
+-----------+-----------+------+------+
| A1        | A2        | A3   | A4   |
+-----------+-----------+------+------+
| 17739623  | 444332002 | E    | 5    |
| 18523133  | 672432011 | E    | 6    |
| 154554554 | 716522012 | E    | 5    |
+-----------+-----------+------+------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM MVLC_MOV_LIN_CRED;
+-----------+---------------+
| B1        | B2            |
+-----------+---------------+
| 17739623  | ALMAGRO 1422  |
| 17739623  | ANTON 9999    |
| 18523133  | OPAASO 1992   |
| 154554554 | CASTAÑO 7422  |
+-----------+---------------+
4 rows in set (0.00 sec)

Haciendo unas pequeñas correcciones a tu consulta, tienes algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT R1.A1,R1.A4,R2.B2
    -> FROM CRED_LINEA_CREDITO R1,MVLC_MOV_LIN_CRED R2
    -> WHERE R1.A1=R2.B1;
+-----------+------+---------------+
| A1        | A4   | B2            |
+-----------+------+---------------+
| 17739623  | 5    | ALMAGRO 1422  |
| 17739623  | 5    | ANTON 9999    |
| 18523133  | 6    | OPAASO 1992   |
| 154554554 | 5    | CASTAÑO 7422  |
+-----------+------+---------------+
4 rows in set (0.00 sec)

Una manera un tanto "tramposa" que te puede servir, es utilizar funciones de agrupación (MIN, MAX) sobre la columna "repetida" para que sólo te traiga un registro, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT R1.A1, R1.A4, MIN(R2.B2)
    -> FROM CRED_LINEA_CREDITO R1
    -> INNER JOIN MVLC_MOV_LIN_CRED R2 ON R1.A1 = R2.B1
    -> GROUP BY R1.A1;
+-----------+------+---------------+
| A1        | A4   | MIN(R2.B2)    |
+-----------+------+---------------+
| 17739623  | 5    | ALMAGRO 1422  |
| 18523133  | 6    | OPAASO 1992   |
| 154554554 | 5    | CASTAÑO 7422  |
+-----------+------+---------------+
3 rows in set (0.00 sec)

Digo que esta es una manera "tramposa" porque en realidad las funciones MIN y MAX no están pensadas para columnas tipo Texto. En este tipo de consultas, mucha veces te interesa sólo el primer o el último registro, pero necesitas alguna columna que te indique el orden en que estas fueron capturados, generalmente se trata de una fecha o de un consecutivo... haz la prueba y nos comentas, si necesitas implementar algún otro criterio para seleccionar un registro, lo comentas también en el foro para poder ofrecerte alguna otra opción.

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 de 2 tablas

Publicado por roberto (12 intervenciones) el 26/11/2014 21:42:40
Leo muchas gracias, esto es justo lo que me faltaba me resulto de maravilla, no había pensado en las Fonciones.


Saludos desde Chile.
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