• Lunes 23 de Diciembre de 2024, 04:36

Autor Tema:  Como combinar dos consultas sin perder filas  (Leído 7041 veces)

codeforall

  • Nuevo Miembro
  • *
  • Mensajes: 9
  • Nacionalidad: es
    • Ver Perfil
Como combinar dos consultas sin perder filas
« en: Sábado 24 de Noviembre de 2012, 11:22 »
0
Hola,

 He hecho dos consultas que funcionan. Una da como resultado 10 filas y la otra 8 filas. Las dos consultas las hago sobre tres tablas, como ejemplo sera asi:

consulta 1: tabla A y B : resultado 10 filas
consulta 2: tabla A y C : resultado 8 filas

Se que existe lo de INNER JOIN Y OUTER JOIN pero he probado y el resultado solo me salen 3 filas cuando yo quiero que esten las 10 filas.

¿Cómo puedo hacerlo?

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #1 en: Domingo 25 de Noviembre de 2012, 07:07 »
0
Me temo que con la informacion que pones no es posible ayudarte ya que no pones ni la consulta, ni la estructura de tu base de datos, ni que resultado esperas obtener, solo dices que obtienes 3 filas de 10, pero sin mas informacion no se puede saber que necesitas, debes ser mas explicito

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

codeforall

  • Nuevo Miembro
  • *
  • Mensajes: 9
  • Nacionalidad: es
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #2 en: Jueves 29 de Noviembre de 2012, 07:43 »
0
Hola,

He estado buscando más información y creo que se trata de una anidación de consultas, aunque no estoy seguro por que creo que anidar consultas es que el resultado de una sirva para la otra.

La consulta que tengo que conseguir es la relacion de todos los palacios(son de exposiciones) indicando el numero de stands que tiene i el numero de personas que se le han asignado i incorporado en algun momento. tiene que estar ordenado por el codigo del palacio y la ciudad

Te muestro la estructura:
ENTIDADES
Palacios(Codigo, Ubicacion, Importancia) "La ubicacion =la ciudad"
Estands(Palacio, Num_estand, tamaño)
{Palacio} clave foranea de Palacios

INTERERELACIONES
Asignan (Palacio, DNI, faena)
{Palacio} clave foranea de Palacios
Incorporan(Feria, convocatoria, DNI, Palacio, Estand, Turno)
{Palau, Estand} clave foranea de Estands

Consulta que muestra codigo, ciudad y nº de estands
Código: [Seleccionar]
SELECT codo,  ubicacion,  COUNT (palacio) AS num_estands
FROM palacios, estands
WHERE palacios.codigo = estands.palacio
GROUP BY codigo, ubicacio
ORDER BY num_estands
Consulta que muestra las personas asignadas
Código: [Seleccionar]
SELECT codigo, 
COUNT (asignan.palacio) AS personas_asignadas
FROM palacios
LEFT OUTER JOIN asignan ON palacios.codigo = asignan.palacio
GROUP BY codigo
Consulta que muestra las personas incorporadas
Código: [Seleccionar]
SELECT codigo, 
COUNT (incorporan.palacio) AS personas_incorporadas
FROM palacios
LEFT OUTER JOIN incorporan ON palacios.codigo = incorporan.palacio
GROUP BY codigo

Como puedes ver por separado las tengo hechas pero aun no logro que el resultado este en una unica tabla. No manejo bien las consultas multiples.

Saludos y gracias

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #3 en: Jueves 29 de Noviembre de 2012, 17:04 »
0
Ya probaste consulta1{A,B} LEFT JOIN consulta2{A,C}??

codeforall

  • Nuevo Miembro
  • *
  • Mensajes: 9
  • Nacionalidad: es
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #4 en: Jueves 29 de Noviembre de 2012, 18:41 »
0
Hola,

 Pues eso nunca lo habia hecho, lo he provado pero me parece que me falta mucha practica por que
me estoy viendo todos los errores; no lo consigo.

Saludos

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #5 en: Sábado 1 de Diciembre de 2012, 21:38 »
0
Hola de nuevo codeforall, disculpa por no poder contestar antes.

Bueno, he analizado tu problema, y creo que es posible de hacer mediante subquerys y utilizando alias

Desconozco si PostgreSQL soporta alias, pero suponiendo que si, le asignaremos un alias "a" a la consulta 1, un alias "b" a la consulta 2, y un alias "c" a la consulta 3.

Te dejo el sguiente codigo, que probe en SQL Server y funciona adecuadamente, si PostgreSQL no soporta el uso de alias y subquerys, te recomendaria que crearas tablas temporales para guardar las subquerys y luego hagas un query normal con las tablas temporales, no se si me entiendas a que me refiero.

Código: [Seleccionar]
select a.codigo, a.ubicacion, a.num_estands, b.personas_asignadas, c.personas_incorporadas
from
(SELECT codigo,  ubicacion,  COUNT (palacio) AS num_estands
FROM palacios, estands
WHERE palacios.codigo = estands.palacio
GROUP BY codigo, ubicacion
) a
inner join
(SELECT codigo, 
COUNT (asignan.palacio) AS personas_asignadas
FROM palacios
LEFT OUTER JOIN asignan ON palacios.codigo = asignan.palacio
GROUP BY codigo) b
on a.codigo = b.codigo
inner join
(SELECT codigo, 
COUNT (incorporan.palacio) AS personas_incorporadas
FROM palacios
LEFT OUTER JOIN incorporan ON palacios.codigo = incorporan.palacio
GROUP BY codigo) c
on a.codigo = c.codigo
order by a.codigo, a.ubicacion;

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

codeforall

  • Nuevo Miembro
  • *
  • Mensajes: 9
  • Nacionalidad: es
    • Ver Perfil
Re:Como combinar dos consultas sin perder filas
« Respuesta #6 en: Domingo 2 de Diciembre de 2012, 09:17 »
0
Hola,

 Funciona, f u n c i o n a   :bravo: :jumpie: