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

Cita:
Iniciado por equality_211085 Ver Mensaje
lo que quiero es una vista que me muestre los campos siguientes: titulomarc, idtipomaterial, idmarc pero la condicion seria que me muestre estos campos cuando el idmarc de la tabla marcmaterial sea distinto al de la tabla marc y que me lo muestr por cada material
Entonces los que se quire es: idmarc de la tabla "marc" tiene que ser distinto del idmarc de la tabla "marcmaterial" para así poder ver todos los idmarc de la tabla "marc" que no se le han asignado un idtipomaterial de la tabla "tipomaterial".

Así es como yo entiendo el planteamiento de tu problema, si esto es así, esto implica que se van a repetir idmarc que no tenga asignado un idtipomaterial, me explico:

Código sql:
Ver original
  1. SELECT * FROM marcmaterial WHERE idmarc <= 10 ORDER BY idmarc;
  2.  idtipomaterial | idmarc
  3. ----------------+--------
  4.               2 |      1
  5.               1 |      2
  6.               3 |      4
  7.               2 |      4
  8.               1 |      4
  9.               3 |      5
  10.               1 |      5
  11.               2 |      5
  12.               3 |      8
  13.               2 |      8
  14.               1 |      8
  15.               3 |      9
  16.               2 |      9
  17.               1 |      9
  18.               2 |     10
  19.               1 |     10
  20. (16 filas)

Al idmarc "1" le tienes asignado idtipomaterial "2", esto quiere decir, segun lo que entiendo de tu planteamiento, que quieres ver los idmarc que le falten por asignar un idtipomaterial con lo que el idmarc "1" se verá dos veces en la consulta, idmarc "1" para el idtipomaterial "1" y idmarc "1" para el idtipomaterial "3", o sea, que el idmarc "1" no tiene asignado Libros y CD-ROM, DVD respectivamente.

Si estoy en lo correcto y eso es lo que quieres, prueba con esta consulta a mi me funcionó:
Código SQL:
Ver original
  1. (
  2.        SELECT marc.idmarc AS "Marca", marc.codmarc, marc.titulomarc, tipomaterial.idtipomaterial
  3.        FROM marc, marcmaterial, tipomaterial
  4.        WHERE tipomaterial.idtipomaterial = marcmaterial.idtipomaterial
  5. )
  6. EXCEPT
  7. (
  8.        SELECT marcmaterial.idmarc, marc.codmarc, marc.titulomarc, tipomaterial.idtipomaterial
  9.        FROM marc, marcmaterial, tipomaterial
  10.        WHERE tipomaterial.idtipomaterial = marcmaterial.idtipomaterial
  11. )
  12. ORDER BY "Marca"
  13. LIMIT 10;
  14.  Marca |     codmarc     |           titulomarc            | idtipomaterial
  15. -------+-----------------+---------------------------------+----------------
  16.      1 | 022             | ISSN                            |              3
  17.      1 | 022             | ISSN                            |              1
  18.      2 | 020             | ISBN                            |              3
  19.      2 | 020             | ISBN                            |              2
  20.      3 | 040             | Fuente de catalogaci&oacute;n   |              2
  21.      3 | 040             | Fuente de catalogaci&oacute;n   |              1
  22.      3 | 040             | Fuente de catalogaci&oacute;n   |              3
  23.      6 | 045             | Cronol&oacute;gico o Fecha/Hora |              2
  24.      6 | 045             | Cronol&oacute;gico o Fecha/Hora |              1
  25.      6 | 045             | Cronol&oacute;gico o Fecha/Hora |              3
  26. (10 filas)

Como puedes ver el idmarc "1", (le puse el alias de "Marca"), aparece dos veces, cada una para cada idtipomaterial que aún no tiene asignado. El idmarc "3" aparece 3 veces porque no tiene asignado ningún idtipomaterial en la relación "marcmaterial".
LIMIT 10 lo puse solo para limitar la cantidad de registros de salida, el total devuelto fueron 132 registros.

Espero que te sirva, saludos y avísame cualquier cosa.
__________________
¿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; 05/12/2009 a las 21:07 Razón: Corrección.