-----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-----
--
TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
               http://archives.postgresql.org/pgsql-es-ayuda

Responder a