Intentando referencias cruzadas.

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: Foro PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Intentando referencias cruzadas.
Date: 2008-11-17 10:04:24
Message-ID: 492141A8.8080400@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

-----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)

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-----

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-11-17 11:21:26 Re: acerca de schemas
Previous Message Jaime Casanova 2008-11-17 04:20:51 Re: acerca de schemas