Re: [Pgsql-ayuda] consulta select complejo

From: Alejandro Diego Garin <linuxero2(at)yahoo(dot)com>
To: Raúl González Diego <rgonzalez(at)itesoluciones(dot)com(dot)mx>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] consulta select complejo
Date: 2002-02-08 18:11:10
Message-ID: 200202081811.PAA18153@smilodon.lan
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias por tu mail, pero las estructuras de las tablas no son asi. El tema
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.
Un servidor puede tener x cantidad de tipos de memoria.
Utilizo la sintaxis de "joins" ya que debo mostrar los servidores que aun no
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
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 duros.

CREATE TABLE servers (
ser_id INTEGER DEFAULT nextval('servers_seq'),
ser_hostname char(35),

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
servers(ser_id)
ON UPDATE CASCADE
ON DELETE CASCADE,
mem_id INTEGER CONSTRAINT fk_server_memory_cpu_id REFERENCES
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ó:
> > 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 USING
> > (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á este query sea más sencillo (suponiendo que las tablas que
> mencionas donde están los tipos de discos duros y su capacidad tienen
> también sus id's), resumo a continuación mi suposición:
>
> 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 = mem.mem_id
> and ser.hdd_id = hdd_id
> group by ser.ser_id
> order by ser.ser_id
>
>
> saludos

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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Victor Ortiz 2002-02-08 18:31:54 [Pgsql-ayuda] Como crear graficas con informacion de una Base de Datos...
Previous Message Alejandro Diego Garin 2002-02-08 16:12:53 [Pgsql-ayuda] consulta select complejo