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

#1 Maxi
25/11/2004 - 15:32 | Informe spam
Hola, una forma es un Group by o sino usar TOP 1


Salu2
Maxi


"CLAUDIO" escribió en el mensaje
news:
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?

Respuesta Responder a este mensaje
#2 Javier Loria
25/11/2004 - 16:04 | Informe spam
Hola:
Y a que llamas la primera fila?
En SQL se trabaja con conjuntos NO ordenados de datos, con lo cual
primera y ultima no tienen sentido :(
En todo caso podrias tratar algo como esto:
SELECT Facturas_Fac.COD_FACTURA, MAX(mov.NumLinea)
FROM Facturas_Fac
INNER JOIN Movim_facturas mov
ON (fac.COD_FACTURA = mov.COD_FACTURA)
GROUP BY Facturas_Fac
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"CLAUDIO" wrote in message
news:
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?

Respuesta Responder a este mensaje
#3 Tako
25/11/2004 - 16:15 | Informe spam
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
#4 Maxi
25/11/2004 - 16:28 | Informe spam
Tako, un solo comentario ;) no estas usando subconsultas ahi sino tablas
derivadas :)


Salu2
Maxi


"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
#5 Tako
25/11/2004 - 16:42 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida