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

Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Estas en el tema de Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!! en el foro de PostgreSQL en Foros del Web. Hola a todos en el foro. Tengo 3 tablas: marc (idmarc, titulomarc, descripcionmarc, ejemplo) tipomaterial (idtipomaterial, descripcion) marcmaterial (idtipomaterial, idmarc) lo que quiero es una ...
  #1 (permalink)  
Antiguo 28/11/2009, 14:47
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Hola a todos en el foro.

Tengo 3 tablas:
marc (idmarc, titulomarc, descripcionmarc, ejemplo)
tipomaterial (idtipomaterial, descripcion)
marcmaterial (idtipomaterial, idmarc)

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

por ejemplo

Cita:
idmarc idtipomaterial -> (1, 1) /* el tipo de material 1 corresponde a libros
idmarc idtipomaterial -> (2, 3) /* el tipo de material 3 corresponde a multimedia
idmarc idtipomaterial -> (1, 2) /* el tipo de material 2 corresponde a publicaciones periodicas (revistas)

Es decir los tipos de materiales pueden tener los mismos campos marc o tener mas o menos.
He estructurado una consulta mas o menos asi pero me lanza muchos registros duplicados

Cita:
CREATE OR REPLACE VIEW "public"."marcnoseleccionados" (
idtipomaterial,
codmarc,
titulomarc)
AS
SELECT tipomaterial.idtipomaterial, marc.codmarc, marc.titulomarc
FROM marc, tipomaterial, marcmaterial
WHERE ((marc.idmarc <> marcmaterial.idmarc) AND (tipomaterial.idtipomaterial =
marcmaterial.idtipomaterial));
Gracias de antemano
  #2 (permalink)  
Antiguo 30/11/2009, 06:45
Avatar de 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!!!!

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.
  #3 (permalink)  
Antiguo 02/12/2009, 10:24
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Muchas gracias por tu aporte xdrtas voy a intentar con tu opcion, muchas gracias por el intento, espero me sirva, de lo contrario seguire en consultas xD

Lo que quiero hacer es hacer solamente la consulta SQL para aplicarlo a mi vista en postgresql solamente amigo, en php (lo que estoy usando) solo llamaria a las filas que necesito de la vista.

Suerte y gracias de nuevo
  #4 (permalink)  
Antiguo 05/12/2009, 14:25
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Hola xdrtas lamento decirte que la estructura de tus consultas me lanzan registros duplicados

mira aca te pongo las imagenes tanto de las consultas como los resultados luego de ejecutarlas

Esta es la primera consulta:



Estos los resultados:


Esta es la segunda:



Y sus resultados:



Como puedes ver esta ese problema, no quiero ninguno duplicado sera que me puedas ayudar?

Aca tambien te pongo el script de mis tablas y sus datos que tengo, espero te sirva:

http://pastoral.uca.edu.ni/imagenes_consulta/script.txt

Gracias de antemano
  #5 (permalink)  
Antiguo 05/12/2009, 18:20
Avatar de 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.
  #6 (permalink)  
Antiguo 08/12/2009, 16:39
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Hola xdrtas gracias por el esfuerzo que pones en mi problema, probare su nueva consulta pero por lo que veo son los resultados que he estado buscando, de antemano quiero agradecerte

Gracias y espero poder cooperarte algun día
  #7 (permalink)  
Antiguo 08/12/2009, 17:06
Avatar de 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!!!!

De nada, solo espero que te sirva. Saludos.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
  #8 (permalink)  
Antiguo 10/12/2009, 14:42
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Hola xdrtas tu consulta resulto un exito amigo, muchas gracias

Chau
  #9 (permalink)  
Antiguo 10/12/2009, 15:11
Avatar de 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!!!!

Me alegro mucho. Saludos.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
  #10 (permalink)  
Antiguo 10/12/2009, 19:04
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 17 años, 3 meses
Puntos: 20
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

Cita:
Iniciado por equality_211085 Ver Mensaje
Lo que quiero hacer es hacer solamente la consulta SQL para aplicarlo a mi vista en postgresql solamente amigo, en php (lo que estoy usando) solo llamaria a las filas que necesito de la vista
Que bueno que solucionaste tu problema, solo te comentare algo que me paso a mi cuando comenze a programar en web.

Al principio igual era de la idea de dejarle todo el "trabajo sucio" al servidor de base de datos, pero me tope que cuando un servidor tiene mucha carga de procesos y uno lo carga mas haciendole consultas costosas a nivel de procesos, es mejor dejarle un poco de ese "trabajo sucio" tambien al servidor web, para aliviar un poco esa carga.

Tenia unos scripts que tardaban mucho debido a que esperaban que postgres me devolviera los resultados ya como yo los necesitaba y cuando modifique mis scripts de tal manera que PHP era quien le daba orden y filtraba mis datos, logre incrementar por muchisimo el tiempo de respuesta de los scripts.

Bueno solo quise comentarlo, quizas no te referias a eso y quizas en tu caso el servidor web y Postgres esten en la misma maquina, pero aun asi deberian trabajar mucho mas rapido.

Saludos
  #11 (permalink)  
Antiguo 12/12/2009, 17:16
 
Fecha de Ingreso: septiembre-2009
Ubicación: Managua
Mensajes: 128
Antigüedad: 15 años, 2 meses
Puntos: 5
Respuesta: Ayuda con consulta SQL en postgres!!!!!, please ayuda!!!!

muchas gracias por tu detalle Sergestux, lo voy a tomar en cuenta

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 12:05.