[Pgsql-ayuda] consulta select complejo

Alejandro Diego Garin linuxero2@yahoo.com
Fri, 8 Feb 2002 15:11:10 -0300


Gracias por tu mail, pero las estructuras de las tablas no son asi. El te=
ma=20
es que la relacion entre memoria y servidores es 1 a muchos.
Por un lado tenga la tabla memorias, donde tengo el tipo y la capacidad
por otro lado la tabla servidores
y por otro la relacion entre ambas.=20
Un servidor puede tener x cantidad de tipos de memoria.
Utilizo la sintaxis de "joins" ya que debo mostrar los servidores que aun=
 no=20
tienen relacion con un tipo de memoria, de la forma que tu me lo sugieres
solo mostrarias los servidores que tienen el dato y eso por el momento
no es necesariamente correcto.
El tema es que se me complicaba cuando quiero unir en el mismo select
dos tablas mas donde tengo los tpos de disco/capacidad y la tabla que la=20
relaciona con los servidores :(
No encontre un ejemplo de como hacer eso.
Gracias por la resp.

Esta es la estructura de las tablas, la misma idea aplica para discos dur=
os.

CREATE TABLE servers (
        ser_id INTEGER DEFAULT nextval('servers_seq'),
        ser_hostname char(35),
  =20
        UNIQUE(ser_hostname),
        PRIMARY KEY(ser_id)
);
CREATE TABLE memory (
        mem_id INTEGER DEFAULT nextval('memory_seq'),
        mem_type VARCHAR(50) NOT NULL,
        mem_capacity INTEGER NOT NULL,
        UNIQUE(mem_type,mem_capacity),
        PRIMARY KEY(mem_id)
);
CREATE TABLE servers_memory (
        sermem_id INTEGER DEFAULT nextval('servers_memory_seq'),
        ser_id INTEGER CONSTRAINT fk_server_memory_ser_id REFERENCES=20
servers(ser_id)
                                                ON UPDATE CASCADE
                                                ON DELETE CASCADE,
        mem_id INTEGER CONSTRAINT fk_server_memory_cpu_id REFERENCES=20
memory(mem_id)
                                                ON UPDATE CASCADE
                                                ON DELETE NO ACTION
);





On Wednesday 06 February 2002 13:37, you wrote:
> El vie, 08-02-2002 a las 10:12, Alejandro Diego Garin escribi=F3:
> > Gente:
> > Una consulta:
> >
> > Tengo el siguiente select
> >
> > SELECT ser.ser_id, trim(ser.ser_hostname) as ser_hostname,
> > sum(mem.mem_capacity) as MBytes
> > FROM servers AS ser LEFT JOIN ( servers_memory JOIN memory AS mem USI=
NG
> > (mem_id) ) USING (ser_id)
> > GROUP BY ser.ser_id,ser.ser_hostname
> >
> > Lo que no encontre es la sintaxis correcta para hacer los joins
> > correspondientes para esa cantidad de tablas, alguna pista?
> >
> >
> > Gracias

>
> quiz=E1 este query sea m=E1s sencillo (suponiendo que las tablas que
> mencionas donde est=E1n los tipos de discos duros y su capacidad tienen
> tambi=E9n sus id's), resumo a continuaci=F3n mi suposici=F3n:
>
> servers
> --------
> ser_id
> ser_hostname
> mem_id
> hdd_id
>
> memory
> -------
> mem_id
> mem_name
> mem_cap
>
> hdd
> ------
> hdd_id
> hdd_name
> hdd_capacity
>
> select ser.ser_id, trim(ser.ser_hostname) as ser_hostname,
> 	mem.mem_cap, hdd.hdd_capacity
> from servers as ser, memory as mem, hdd
> where ser.mem_id =3D mem.mem_id
> and   ser.hdd_id =3D hdd_id
> group by ser.ser_id
> order by ser.ser_id
>
>
> saludos

--=20
Alejandro Diego Garin
GNU/Linux user #151577 counter.li.org
Running Debian/Sid kernel 2.4.16