Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta en una relación de muchos a muchos

Estas en el tema de Consulta en una relación de muchos a muchos en el foro de SQL Server en Foros del Web. Voy a realizar la sigte consulta: SELECT nombreCampo1,nombreCampo2,nombreCampo3 FROM tabla1, tabla2, tabla3, tabla4 WHERE tabla1.idCampo1=tabla2.idCampo1 and tabla3.idCampo2 = tabla2.idCampo2 and tabla1.idCampo1=tabla4.idCampo1 Donde la tabla3 es ...
  #1 (permalink)  
Antiguo 22/08/2007, 07:22
Avatar de StephenQ  
Fecha de Ingreso: marzo-2007
Mensajes: 114
Antigüedad: 17 años, 1 mes
Puntos: 2
Pregunta Consulta en una relación de muchos a muchos

Voy a realizar la sigte consulta:

SELECT nombreCampo1,nombreCampo2,nombreCampo3 FROM tabla1, tabla2,
tabla3, tabla4

WHERE tabla1.idCampo1=tabla2.idCampo1
and tabla3.idCampo2 = tabla2.idCampo2
and tabla1.idCampo1=tabla4.idCampo1


Donde la tabla3 es intermedia de tabla1 y tabla2

Suponiendo que en tabla1 tengo un registro y en tabla3 tengo 4
¿Por qué al ejecutar la sentencia, cada campo de la tabla1 y tabla4 se multiplica por el número de registros que posee la tabla2?

Gracias.

StephenQ
  #2 (permalink)  
Antiguo 22/08/2007, 07:34
 
Fecha de Ingreso: junio-2007
Ubicación: Barcelona
Mensajes: 20
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Consulta en una relación de muchos a muchos

Qué quieres decir con:

Cita:
Iniciado por StephenQ Ver Mensaje
Donde la tabla3 es intermedia de tabla1 y tabla2
¿Entonces quieres relacionar la tabla1 y la tabla2 con la tabla3, y después relacionar la tabla3 con la tabla4?

No ha quedado muy clara tu consulta...

¿Podrías especificarla un poco más para poder ayudarte mejor?
  #3 (permalink)  
Antiguo 22/08/2007, 07:40
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Consulta en una relación de muchos a muchos

Cita:
Iniciado por StephenQ Ver Mensaje
¿Por qué al ejecutar la sentencia, cada campo de la tabla1 y tabla4 se multiplica por el número de registros que posee la tabla2?

Gracias.

StephenQ

Porque es el resultado normal de un join...

Espero te sirva el siguiente manual de SQL....

Manual SQL

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 22/08/2007, 08:36
Avatar de StephenQ  
Fecha de Ingreso: marzo-2007
Mensajes: 114
Antigüedad: 17 años, 1 mes
Puntos: 2
Re: Consulta en una relación de muchos a muchos

Hola Argen !!

Gracias por tu respuesta, lo que quiero decir es:

tabla1 tiene tres campos idCampo1, nombreCampo1 y idCampo3
tabla2 tiene dos campos idCampo2 y nombreCampo2
Donde la tabla3 es intermedia de tabla1 y tabla2 con sus campos son idCampo1 y idCampo2 como claves foranes
tabla4 tiene dos campos idCampo3 y nombreCampo3



La tabla4 se relaciona con tabla4 de 1 a ∞
La tabla1 se relaciona con tabla3 de 1 a ∞
La tabla2 se relaciona con tabla3 de 1 a ∞

Entonces al ejecutar la sentencia me trae cada dato multiplido por cuartro

Espero asi sea mas facil de entender, gracias.

Me cuentas...
  #5 (permalink)  
Antiguo 22/08/2007, 08:41
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Re: Consulta en una relación de muchos a muchos

Cita:
Iniciado por Andres95 Ver Mensaje
Porque es el resultado normal de un join...

Espero te sirva el siguiente manual de SQL....

Manual SQL

Saludos!


Ya

wueno weuno... oye StephenQ al no hacer los joins respectivos estás haciendo un full join
  #6 (permalink)  
Antiguo 22/08/2007, 09:07
Avatar de StephenQ  
Fecha de Ingreso: marzo-2007
Mensajes: 114
Antigüedad: 17 años, 1 mes
Puntos: 2
Re: Consulta en una relación de muchos a muchos

Gracias...
  #7 (permalink)  
Antiguo 22/08/2007, 10:19
 
Fecha de Ingreso: junio-2007
Ubicación: Barcelona
Mensajes: 20
Antigüedad: 16 años, 10 meses
Puntos: 1
Re: Consulta en una relación de muchos a muchos

El campo idCampo3 está en la tabla1? No debería ser en la tabla3?

Quizás no te haya entendido bien aún... De todas formas, creo que la sql podría ser algo como:

SELECT t1.nombreCampo1, t2.nombreCampo2, t4.nombreCampo3
FROM tabla4 as t4 LEFT OUTER JOIN
tabla3 as t3 ON t4.idCampo3 = t3.idCampo3 LEFT OUTER JOIN
tabla1 as t1 ON t3.idCampo1 = t1.idCampo1 LEFT OUTER JOIN
tabla2 as t2 ON t3.idCampo2 = t2.idCampo2


Suerte!
  #8 (permalink)  
Antiguo 22/08/2007, 10:27
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Consulta en una relación de muchos a muchos

Para que no los muestre repetidos, es necesario agrupar los campos que quieres unicos y aplicar funciones de agregacion al resto de los campos...

por ejemplo.

si se tiene una tabla "Cliente" y una tabla "Facturas" 1 a muchos, relacionado por idCliente

Si se quiere obtener el cliente sin repetir, y obtener la ultima factura del mismo.. se agrupa por IdCliente de la tabla Cliente y se selecciona el Max(IdFactura) de la tabla "Facturas"...

En el manual que te comento, viene a mayor detalle el uso de joins.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 03/03/2011, 11:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Re: Consulta en una relación de muchos a muchos

Buenas,
tengo un select parecido al q comentan pero no da los resultados que quiero
tengo las tablas medico, especialidad y med_especialidad donde un medico tiene muchas especialidades y quiero ver el listado de medicos y solo una especialidad puede ser la q tenga max id, hice la consulta:

select m.nombre, e.nombre, max(e.id) from medico m inner join med_especialidad me on (m.id=me.id_medico) inner join especialidad e on (e.id=me.id_esp) group by m.id

pero sigue arrojando el listado de medicos con todas sus especialidades

que estoy haciendo mal???
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:18.