Inner join pero que sólo tome 1 fila de la tabla “hija”

25/11/2004 - 15:25 por CLAUDIO | Informe spam
Necesito hacer una Inner join entre 2 tablas pero que tome SIEMPRE 1 sola
fila de la tabla hija.

Tengo por ejemplo esta query:

select *
from facturas fac
INNER JOIN Movim_facturas mov ON (fac.COD_FACTURA = mov.COD_FACTURA)

El problema que tengo con esta query es que si tengo por ejemplo COD_FACTURA
de la tabla Facturas = 5 y tengo 3 registros en la tabla Movim_facturas con
COD_FACTURA = 5, entonces me devuelve 3 registros cuando yo quiero que me
devuelva sólo 1 (me da igual cual de los 3 me devuelva)

Se puede hacer sin tener que hacer Group by?
Cual es la mejor manera para que me devuelva sólo 1 registro por cada
COD_FACTURA de Factura?

Preguntas similare

Leer las respuestas

#6 Maxi
25/11/2004 - 16:57 | Informe spam
jajaja!! Sabes que pasa, hice la correcion porque hay muchos que indican que
las subconsultas no son una buena tecnica de programacion SQL, y si decis a
algo que se llama "Tabla derivada" subconsulta, puede llevar a errores :)

Una sunconsultas es algo asi como

SELECT CAMPO1,(SELECT ...) AS CAMPO2

Se nota la diferencia no?


Salu2
Maxi


"Tako" escribió en el mensaje
news:
Maxi wrote:
Tako, un solo comentario ;) no estas usando subconsultas ahi sino
tablas derivadas :)




A ver... deja que mire por ahí.

subconsultas...
tablas derivadas...

pues tienes razón, y yo toda la vida llamando a ambos casos
"subconsultas" - al fin y al cabo tienen casi la misma estructura- y
resulta
que se llaman de forma diferente :)

Espero que no se me hayan enfadado ni las "subconsultas" ni las "tablas
derivadas" por el error, yo al menos me enfadaría mucho si me llamasen
"orangután" solo por que tenemos una estructura parecida :D


"Tako" escribió en el mensaje
news:
CLAUDIO wrote:
Necesito hacer una Inner join entre 2 tablas pero que tome SIEMPRE 1
sola fila de la tabla hija.

Tengo por ejemplo esta query:

select *
from facturas fac
INNER JOIN Movim_facturas mov ON (fac.COD_FACTURA = mov.COD_FACTURA)

El problema que tengo con esta query es que si tengo por ejemplo
COD_FACTURA de la tabla Facturas = 5 y tengo 3 registros en la tabla
Movim_facturas con COD_FACTURA = 5, entonces me devuelve 3
registros cuando yo quiero que me devuelva sólo 1 (me da igual cual
de los 3 me devuelva)



Otra opción (no se como de buena) es

select *
from facturas_fac inner join (select top 1 * from Movim_facturas
mov) as m on facturas_fac.codFactura = m.cod_factura

Lo único recuerda que SQL no tiene orden si no se lo especificas
tu, así
que en la subconsulta tendrás que ordenar para que ser el primero
tenga algún significado.


Se puede hacer sin tener que hacer Group by?
Cual es la mejor manera para que me devuelva sólo 1 registro por
cada COD_FACTURA de Factura?









Respuesta Responder a este mensaje
#7 Tako
25/11/2004 - 17:23 | Informe spam
Maxi wrote:
jajaja!! Sabes que pasa, hice la correcion porque hay muchos que
indican que las subconsultas no son una buena tecnica de programacion
SQL, y si decis a algo que se llama "Tabla derivada" subconsulta,
puede llevar a errores :)

Una sunconsultas es algo asi como

SELECT CAMPO1,(SELECT ...) AS CAMPO2

Se nota la diferencia no?




Me parece perfecto que hicieras la corrección, ya te digo que nunca
había utilizado el termino "tabla derivada" y siempre es bueno saber como se
llama realmente cada cosa.

Y para acabar de rizar el rizo también son subconsultas las de tipo

select *
from tabla
where campo in (select...)

No se si nos olvidamos de algún tipo más de consulta dentro de consulta.


"Tako" escribió en el mensaje
news:
Maxi wrote:
Tako, un solo comentario ;) no estas usando subconsultas ahi sino
tablas derivadas :)




A ver... deja que mire por ahí.

subconsultas...
tablas derivadas...

pues tienes razón, y yo toda la vida llamando a ambos casos
"subconsultas" - al fin y al cabo tienen casi la misma estructura- y
resulta
que se llaman de forma diferente :)

Espero que no se me hayan enfadado ni las "subconsultas" ni las
"tablas derivadas" por el error, yo al menos me enfadaría mucho si
me llamasen "orangután" solo por que tenemos una estructura parecida
:D


"Tako" escribió en el mensaje
news:
CLAUDIO wrote:
Necesito hacer una Inner join entre 2 tablas pero que tome
SIEMPRE 1 sola fila de la tabla hija.

Tengo por ejemplo esta query:

select *
from facturas fac
INNER JOIN Movim_facturas mov ON (fac.COD_FACTURA >>>>> mov.COD_FACTURA)

El problema que tengo con esta query es que si tengo por ejemplo
COD_FACTURA de la tabla Facturas = 5 y tengo 3 registros en la
tabla Movim_facturas con COD_FACTURA = 5, entonces me devuelve 3
registros cuando yo quiero que me devuelva sólo 1 (me da igual
cual de los 3 me devuelva)



Otra opción (no se como de buena) es

select *
from facturas_fac inner join (select top 1 * from Movim_facturas
mov) as m on facturas_fac.codFactura = m.cod_factura

Lo único recuerda que SQL no tiene orden si no se lo especificas
tu, así
que en la subconsulta tendrás que ordenar para que ser el primero
tenga algún significado.


Se puede hacer sin tener que hacer Group by?
Cual es la mejor manera para que me devuelva sólo 1 registro por
cada COD_FACTURA de Factura?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida