LEFT OUTER JOIN

12/04/2005 - 22:59 por Lic. Julio Cesar Velasco Gomez | Informe spam
Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera tengo 2000
registro y en la segunda 500, quiero hacer un select de tal manera que llene
un dato que hace falta en la primera y que POSIBLEMENTE este en la segunda,
usando un campo comun, mi problema es que no se porque me regresa aprox 2300
registros. Segun yo con un LEFT OUTER JOIN deberian estar exactamente los
2000 de la primera tabla, y los registros que coincidan con su campo lleno,
los que no coincidan pues en NULL. Haciendo pruebas he visto que con el
DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de mas, lo
que no capto es porque tengo que usar el DISTINCT y aun asi no me regresa
mis 2000 originales.


SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
FROM T1 LEFT OUTER JOIN ACTUAL;
ON T1.REGISTRO=¬TUAL.REGISTRO;
INTO TABLE SYS(2023)+'\t3' .

Preguntas similare

Leer las respuestas

#1 Ricardo Passians
13/04/2005 - 01:40 | Informe spam
Debes chequear si el campo REGISTRO es único en ambas tablas, es decir, que
no se repite en ninguna.


Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera tengo


2000
registro y en la segunda 500, quiero hacer un select de tal manera que


llene
un dato que hace falta en la primera y que POSIBLEMENTE este en la


segunda,
usando un campo comun, mi problema es que no se porque me regresa aprox


2300
registros. Segun yo con un LEFT OUTER JOIN deberian estar exactamente los
2000 de la primera tabla, y los registros que coincidan con su campo


lleno,
los que no coincidan pues en NULL. Haciendo pruebas he visto que con el
DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de mas,


lo
que no capto es porque tengo que usar el DISTINCT y aun asi no me regresa
mis 2000 originales.


SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
FROM T1 LEFT OUTER JOIN ACTUAL;
ON T1.REGISTRO=¬TUAL.REGISTRO;
INTO TABLE SYS(2023)+'\t3' .




Respuesta Responder a este mensaje
#2 Luis María Guayán
13/04/2005 - 03:38 | Informe spam
Como te indica Ricardo, tienes registros repetidos en la tabla Actual.

Quizás con otra cóndición el el LEFT JOIN ... ON puedas solucionar tu problema


Luis María Guayán
Tucumán, Argentina
________________________________
SysOp de www.PortalFox.com
Microsoft Visual FoxPro MVP
________________________________
La palabra imposible solo figura
en el diccionario de los tontos



"Ricardo Passians" escribió en el mensaje
news:

Debes chequear si el campo REGISTRO es único en ambas tablas, es decir, que
no se repite en ninguna.


Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera tengo


2000
registro y en la segunda 500, quiero hacer un select de tal manera que


llene
un dato que hace falta en la primera y que POSIBLEMENTE este en la


segunda,
usando un campo comun, mi problema es que no se porque me regresa aprox


2300
registros. Segun yo con un LEFT OUTER JOIN deberian estar exactamente los
2000 de la primera tabla, y los registros que coincidan con su campo


lleno,
los que no coincidan pues en NULL. Haciendo pruebas he visto que con el
DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de mas,


lo
que no capto es porque tengo que usar el DISTINCT y aun asi no me regresa
mis 2000 originales.


SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
FROM T1 LEFT OUTER JOIN ACTUAL;
ON T1.REGISTRO=¬TUAL.REGISTRO;
INTO TABLE SYS(2023)+'\t3' .








Respuesta Responder a este mensaje
#3 Lic. Julio Cesar Velasco Gomez
13/04/2005 - 15:35 | Informe spam
De hecho en la que se repiten es en la primera T1, ya que es un
historico, en la de actual, solo se repiten si estan en blanco, ya que es un
dato que puede o no estar.

"Ricardo Passians" escribió en el mensaje
news:

Debes chequear si el campo REGISTRO es único en ambas tablas, es decir,


que
no se repite en ninguna.


> Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera tengo
2000
> registro y en la segunda 500, quiero hacer un select de tal manera que
llene
> un dato que hace falta en la primera y que POSIBLEMENTE este en la
segunda,
> usando un campo comun, mi problema es que no se porque me regresa aprox
2300
> registros. Segun yo con un LEFT OUTER JOIN deberian estar exactamente


los
> 2000 de la primera tabla, y los registros que coincidan con su campo
lleno,
> los que no coincidan pues en NULL. Haciendo pruebas he visto que con el
> DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de


mas,
lo
> que no capto es porque tengo que usar el DISTINCT y aun asi no me


regresa
> mis 2000 originales.
>
>
> SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
> FROM T1 LEFT OUTER JOIN ACTUAL;
> ON T1.REGISTRO=¬TUAL.REGISTRO;
> INTO TABLE SYS(2023)+'\t3' .
>
>
>
>


Respuesta Responder a este mensaje
#4 Ricardo Passians
15/04/2005 - 02:20 | Informe spam
Pues entonces es raro. No lo debería hacer. En este caso, si la tabla de la
derecha tiene registros repetidos es que debería producir mas resultados que
los registros de la tabla de la izquierda.
Si pudieras empaquetarlas y mandarnos las dos tablas de ejemplo o al menos
una muestra con pocos registros para poder ayudarte mejor.

Saludos



"Lic. Julio Cesar Velasco Gomez" wrote in
message news:
De hecho en la que se repiten es en la primera T1, ya que es un
historico, en la de actual, solo se repiten si estan en blanco, ya que es


un
dato que puede o no estar.

"Ricardo Passians" escribió en el mensaje
news:
>
> Debes chequear si el campo REGISTRO es único en ambas tablas, es decir,
que
> no se repite en ninguna.
>
>
> > Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera


tengo
> 2000
> > registro y en la segunda 500, quiero hacer un select de tal manera que
> llene
> > un dato que hace falta en la primera y que POSIBLEMENTE este en la
> segunda,
> > usando un campo comun, mi problema es que no se porque me regresa


aprox
> 2300
> > registros. Segun yo con un LEFT OUTER JOIN deberian estar exactamente
los
> > 2000 de la primera tabla, y los registros que coincidan con su campo
> lleno,
> > los que no coincidan pues en NULL. Haciendo pruebas he visto que con


el
> > DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de
mas,
> lo
> > que no capto es porque tengo que usar el DISTINCT y aun asi no me
regresa
> > mis 2000 originales.
> >
> >
> > SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
> > FROM T1 LEFT OUTER JOIN ACTUAL;
> > ON T1.REGISTRO=¬TUAL.REGISTRO;
> > INTO TABLE SYS(2023)+'\t3' .
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Lic. Julio Cesar Velasco Gomez
18/04/2005 - 15:05 | Informe spam
De hecho gracias a tu ultimo comentario cai en la cuenta de lo que ocurria,
ya que en la tabla de la derecha aunque no deberia, tenia registros
repetidos, algunos en blanco, entonces lo que hice fue hacer un select
previo sobre esa tabla donde no hubiera registros repetidos, y parece que
esa fue la solucion.

Gracias por su atencion y Saludos!!


"Ricardo Passians" escribió en el mensaje
news:
Pues entonces es raro. No lo debería hacer. En este caso, si la tabla de


la
derecha tiene registros repetidos es que debería producir mas resultados


que
los registros de la tabla de la izquierda.
Si pudieras empaquetarlas y mandarnos las dos tablas de ejemplo o al menos
una muestra con pocos registros para poder ayudarte mejor.

Saludos



"Lic. Julio Cesar Velasco Gomez" wrote


in
message news:
> De hecho en la que se repiten es en la primera T1, ya que es un
> historico, en la de actual, solo se repiten si estan en blanco, ya que


es
un
> dato que puede o no estar.
>
> "Ricardo Passians" escribió en el mensaje
> news:
> >
> > Debes chequear si el campo REGISTRO es único en ambas tablas, es


decir,
> que
> > no se repite en ninguna.
> >
> >
> > > Hola a todos!! Tengo una duda: tengo 2 tablas donde en la primera
tengo
> > 2000
> > > registro y en la segunda 500, quiero hacer un select de tal manera


que
> > llene
> > > un dato que hace falta en la primera y que POSIBLEMENTE este en la
> > segunda,
> > > usando un campo comun, mi problema es que no se porque me regresa
aprox
> > 2300
> > > registros. Segun yo con un LEFT OUTER JOIN deberian estar


exactamente
> los
> > > 2000 de la primera tabla, y los registros que coincidan con su


campo
> > lleno,
> > > los que no coincidan pues en NULL. Haciendo pruebas he visto que con
el
> > > DISTINCT es bastante mas certero, teniendo como 10 o 12 registros de
> mas,
> > lo
> > > que no capto es porque tengo que usar el DISTINCT y aun asi no me
> regresa
> > > mis 2000 originales.
> > >
> > >
> > > SELECT DISTINCT T1.*,ACTUAL.OCUPADO AS OCUPACIO;
> > > FROM T1 LEFT OUTER JOIN ACTUAL;
> > > ON T1.REGISTRO=¬TUAL.REGISTRO;
> > > INTO TABLE SYS(2023)+'\t3' .
> > >
> > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida