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