Re: Intentando referencias cruzadas.

From: miguel <mvillagomez(at)sayab(dot)com(dot)mx>
To: Pablo Braulio <brulics(at)gmail(dot)com>
Cc: Foro PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Intentando referencias cruzadas.
Date: 2008-11-18 18:36:32
Message-ID: 1227033392.3048.13.camel@sayab-w03.sayab
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El lun, 17-11-2008 a las 11:04 +0100, Pablo Braulio escribió:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hola a todos.
>
> Estoy tratando de realizar una consulta del tipo referencias cruzadas
> (creo que se llama así).
>
> El caso es que es la primera vez que lo intento, y no lo consigo.
>
> Tengo las siguientes tablas:
>
> \d empleados
> Table "public.empleados"
> Column | Type | Modifiers
> - -
> -
> ------------------+-----------------------+--------------------------------------------------------
> id | integer | not null default
> nextval('empleados_id_seq'::regclass)
> empresa | integer | not null
> nombre | name | not null
> apellidos | character varying(50) | not null
> ....
> Indexes:
> "empleados_pkey" PRIMARY KEY, btree (id)
> Foreign-key constraints:
> "empleados_empresa_fkey" FOREIGN KEY (empresa) REFERENCES
> clientes(id) ON UPDATE CASCADE ON DELETE CASCADE
>
> \d ficheros
> Table "public.ficheros"
> Column | Type | Modifiers
> - -
> -
> -------------+------------------------+-------------------------------------------------------
> id | integer | not null default
> nextval('ficheros_id_seq'::regclass)
> empresa | integer |
> nombre | character varying(40) | not null
> ...
> Indexes:
> "ficheros_pkey" PRIMARY KEY, btree (id)
> Foreign-key constraints:
> "ficheros_empresa_fkey" FOREIGN KEY (empresa) REFERENCES
> clientes(id) ON UPDATE CASCADE ON DELETE CASCADE
>
>
> \d ficheros_empleados
> Table "public.ficheros_empleados"
> Column | Type | Modifiers
> - -
> -
> ----------+---------+-----------------------------------------------------------------
> id | integer | not null default
> nextval('ficheros_empleados_id_seq'::regclass)
> fichero | integer | not null
> empleado | integer | not null
> Indexes:
> "ficheros_empleados_pkey" PRIMARY KEY, btree (id)
> Foreign-key constraints:
> "ficheros_empleados_empleado_fkey" FOREIGN KEY (empleado) REFERENCES
> empleados(id) ON UPDATE CASCADE ON DELETE CASCADE
> "ficheros_empleados_fichero_fkey" FOREIGN KEY (fichero) REFERENCES
> ficheros(id) ON UPDATE CASCADE ON DELETE CASCADE
>
> Con la siguiente consulta obtengo los datos que necesito para luego armar la
> consulta cruzada:
>
> select e.nombre, e.apellidos, f.nombre, case when fe.empleado=e.id and
> fe.fichero=f.id then 'Si' else 'No' end as Acceso
> from empleados e, ficheros f, ficheros_empleados fe;
>
> nombre | apellidos | nombre | acceso
> - - -----------+-----------+------------------+--------
> MARIA | TIGRE | fichero de ..... | No
> MARIA | TIGRE | clientes | No
> Manolo | Grillote | fichero de ..... | No
> Manolo | Grillote | clientes | No
> MANOLILLO | GAFOTAS | fichero de ..... | No
> MANOLILLO | GAFOTAS | clientes | Si
> (6 rows)
>

Prueba si te sirve esta consulta:

SELECT e.nombre, e.apellidos, (SELECT (CASE (COUNT(*)) WHEN 0 THEN 'No'
ELSE 'Si' END) FROM ficheros_empleados fe WHERE fe.empleado=e.id AND
fe.fichero=f.id)::varchar AS "fichero de ...."
FROM empleados e

Harías lo mismo para clientes.
Tal vez no sea la consulta que necesitas pero igual te puedes basar en
ella.

> Lo que necesito es que los resultados sean del modo:
>
> nombre | apellidos | clientes | fichero de ....
> - - -----------+-----------+----------+----------------
> MARIA | TIGRE | No | No
> MARIA | TIGRE | No | No
> Manolo | Grillote | No | No
> Manolo | Grillote | No | No
> MANOLILLO | GAFOTAS | No | No
> MANOLILLO | GAFOTAS | Si | No
>
> He buscado información y he visto el uso de transform y pivot, pero no
> consigo que funcione.
>
> ¿Alguien sabría decirme como hacer esto con postgres?.
> - --
> Saludos cordiales.
> Pablo.
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iEYEARECAAYFAkkhQagACgkQK7lGsMchFszJSACfRVzVN+xevDZa81JCk6yWvrwC
> DOgAni1UVkDzNGlqZndPhB0Ly1/GKgMq
> =5VUA
> -----END PGP SIGNATURE-----
> --
> TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
> http://archives.postgresql.org/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Chávez B. 2008-11-18 18:37:01 Re: sobre respuestas fuera de un hilo
Previous Message Gilberto Castillo Martínez 2008-11-18 18:36:24 Re: Instalacion de POSTGRESQL