Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/11/2009, 06:45
Avatar de xdrtas
xdrtas
 
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 16 años, 6 meses
Puntos: 13
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Hola equality_211085, estuve haciendo bastantes pruebas sobre el planteamiento de tu problema, y lo único que se me ocurre es que hagas dos consultas distitas y desde el lenguaje de programación unas los resultados, (No te digo que no se pueda hacer todo desde SQL, solo te digo que yo no lo logré hacer como tu quieres).

Primero te muestro la estructura de las tablas con los registros que le agregé:
Código sql:
Ver original
  1. SELECT * FROM marc;
  2.  idmarc | titulomarc | descripcionmarc | ejemplo |  codmarc
  3. --------+------------+-----------------+---------+-----------
  4.       1 | Primero    | Libros          |         | 000000001
  5.       2 | Segundo    | Revistas        |         | 000000002
  6.       3 | Tercero    | Multimedia      |         | 000000003
  7. (3 filas)
  8.  
  9.  
  10. SELECT * FROM tipomaterial;
  11.  idtipomaterial | descripcion
  12. ----------------+-------------
  13.               1 | Libros
  14.               2 | Revistas
  15.               3 | Multimedia
  16. (3 filas)
  17.  
  18.  
  19. SELECT * FROM marcmaterial;
  20.  idtipomaterial | idmarc
  21. ----------------+--------
  22.               1 |      1
  23.               3 |      1
  24.               3 |      2
  25. (3 filas)

Ahora la consulta que me devuelve todos los registros de la tabla marc que no tienen asignado un tipo de material:

Código SQL:
Ver original
  1. SELECT marc.idmarc AS "Marca", marc.codmarc, marc.titulomarc
  2. FROM marc
  3. RIGHT JOIN marcmaterial ON marcmaterial.idmarc <> marc.idmarc LEFT JOIN tipomaterial ON tipomaterial.idtipomaterial = marcmaterial.idtipomaterial
  4. ORDER BY marc.idmarc;
  5.  Marca |  codmarc  | titulomarc
  6. -------+-----------+------------
  7.      1 | 000000001 | Primero
  8.      2 | 000000002 | Segundo
  9.      2 | 000000002 | Segundo
  10.      3 | 000000003 | Tercero
  11.      3 | 000000003 | Tercero
  12.      3 | 000000003 | Tercero
  13. (6 filas)

Si te fijas bien, la consulta de aquí arriba me devuelve las tuplas de la tabla marc que no se le han asignado un idtipomaterial.
Pero ahora para mostrar los idtipomaterial correspondientes hice la siguiente consulta por separado:

Código SQL:
Ver original
  1. SELECT tipomaterial.idtipomaterial AS "Tipo"
  2. FROM marc
  3. RIGHT JOIN marcmaterial ON marcmaterial.idmarc = marc.idmarc LEFT JOIN
  4. tipomaterial ON tipomaterial.idtipomaterial <> marcmaterial.idtipomaterial
  5. ORDER BY marc.idmarc;
  6.  Tipo
  7. ------
  8.     2
  9.     3
  10.     1
  11.     2
  12.     1
  13.     2
  14. (6 filas)

De nuevo, si te fijas, la consulta ha devuelto los idtipomaterial que se le falta por asignar a los idmarc, ambas consultas los ordené con el mismo patrón, (marc.idmar), así el "1" devuelto por marc corresponda al "2" del tipomaterial.
La unión de los resultados los puedes tratar programáticamente desde el lenguaje que estés usando.

Intenté varias combinaciones, incluido "union", pero devuelven muchas tuplas, y para este caso, (me refiero a los registros que inserté y su combinación en la relación marcmaterial), no me sirvió ninguna, si quieres te explico el porque, pero después, si veo que necesitas más ayuda, porque esta respuesta se hace demasiado larga y no es la idea.

Perdona que esté tan complicado, seguramente huesos o algún otro miembro del foro te pueda aconsejar mejor, mientras y si quieres puedes ir probando con mi opción.

Saludos.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]

Última edición por xdrtas; 30/11/2009 a las 08:49 Razón: Error en la redacción.