Re: Duda de SQL

Lists: pgsql-es-ayuda
From: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Duda de SQL
Date: 2007-01-10 00:39:18
Message-ID: 20070110003918.GJ2609@caribdis.nul-unu.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Dada la siguiente estructura (simplificada):

create table Valuacion (int id);
create table Vale(int id_valuacion, int estado, otras_cosas);

Si quiero 'las valuaciones que tienen por lo menos un vale en estado
n', ¿cual de las siguientes parece más recomendable?

select distinct v.id from Valuacion v where v.id in
(select va.id_vale from Vale va where va.estado = n);

o

select distinct v.id from Valuacion v where n in
(select va.estado from Vale va where va.id_valuacion = v.id);

¿En que me fijo para elegir una sobre otra? ¿Hay algo más simple?

Siento que estoy matando moscas a cañonazos al usar un subselect para
pregunta tan sencilla.

(Puntos extra: En realidad estoy haciendo las consultas via
Hibernate. Si alguien lo conoce, ¿se le ocurre como traducir la
primera a HQL, dado que Vale se ve como una propiedad Set de
Valuacion?)

--
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
Zenophobia: the irrational fear of convergent sequences.


From: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda de SQL
Date: 2007-01-10 03:54:43
Message-ID: 20070110035443.GL2609@caribdis.nul-unu.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

[Reenviando de respuesta privada]

On Wed, Jan 10, 2007 at 12:45:53AM -0300, Guillermo O. Burastero wrote:
> El 9/01/07, Luis Rodrigo Gallardo Cruz<rodrigo(at)nul-unu(dot)com> escribió:
> >Si quiero 'las valuaciones que tienen por lo menos un vale en estado
> >n', ¿cual de las siguientes parece más recomendable?
>
> Sugiero el siguiente y simple joint
> select distinct id from valuacion, vale where id=id_valuacion and estado=n;

Je. Claro. No sé en dónde tenía la cabeza.

--
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
Zenophobia: the irrational fear of convergent sequences.


From: GABRIEL COLINA <colina_movil(at)yahoo(dot)com>
To: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda de SQL
Date: 2007-01-10 12:14:18
Message-ID: 472937.20876.qm@web34701.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Yo haria el join con INNER JOIN o LEFT JOIN, escribiria mas pero la base trabajaria menos.
select distinct id valuacion.* from valuacion inner join vale into id=id_valuacion
where estado=n
order by cualquier_cosa;

Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com> escribió:
[Reenviando de respuesta privada]

On Wed, Jan 10, 2007 at 12:45:53AM -0300, Guillermo O. Burastero wrote:
> El 9/01/07, Luis Rodrigo Gallardo Cruz escribió:
> >Si quiero 'las valuaciones que tienen por lo menos un vale en estado
> >n', ¿cual de las siguientes parece más recomendable?
>
> Sugiero el siguiente y simple joint
> select distinct id from valuacion, vale where id=id_valuacion and estado=n;

Je. Claro. No sé en dónde tenía la cabeza.

--
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
Zenophobia: the irrational fear of convergent sequences.

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/


From: Miguel Ortega <mortega(at)tc(dot)com(dot)ve>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda de SQL
Date: 2007-01-10 12:23:48
Message-ID: 45A4DAD4.4040600@tc.com.ve
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda


> Yo haria el join con INNER JOIN o LEFT JOIN, escribiria mas pero la
> base trabajaria menos.
> select distinct id valuacion.* from valuacion inner join vale into
> id=id_valuacion
> where estado=n
> order by cualquier_cosa;
>
> *//*
Buenos días a todos!!!!

Lei esto y me parecío curioso, ¿Cual es la diferencia a nivel de
ejecucion entre un JOIN y relacionar las tablas mediante el WHERE?....

Yo me acostumbre a usar los JOIN por varias razones (me era más fácil
leer los querys, podía hacer uso del LEFT y RIGHT) sin embargo, mis
compañeros dedicados a Oracle siguen utilizando la clausula WHERE ( y
creo que un operador "+" -no estoy seguro - para el caso del LEFT JOIN)

Mientras escribo esto se que mas de uno me va a decir que escriba un par
de sentencias y vea el explayn analize pero me interesaría una
explicacion más cientifica ( no sólo la prueba de que, en efecto, es más
rápido de una manera que de la otra)

Saludos!!!

--
_________________________________________
Miguel A. Ortega B.
Analista de Sistemas y Soporte a Usuarios
Technologies Consulting C.A.


From: GABRIEL COLINA <colina_movil(at)yahoo(dot)com>
To: mortega(at)tc(dot)com(dot)ve
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda de SQL
Date: 2007-01-10 12:36:25
Message-ID: 759721.85094.qm@web34710.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Buena pregunta.

Mi experiencia viene de mssql, el cual al estar el inner join comienza descartando los registros que no coinciden en la condicion en cambio con el select * from tabla1,tabla2 arma todas los tuplas coinsidan o no y despues filtra por el where, lo cual se le hace mas tedioso. proba con access hacerlo sin condicion con dos tablas y vas a ver, en cambio con un join fijate el resultado.

Despues lo que comentas tambien es cientifico si haces un explayn analize y ves que resulta mas rapido con join en el 100% de casos, esta comprobado.

Un abrazo
Gabriel Colina

Miguel Ortega <mortega(at)tc(dot)com(dot)ve> escribió:

> Yo haria el join con INNER JOIN o LEFT JOIN, escribiria mas pero la
> base trabajaria menos.
> select distinct id valuacion.* from valuacion inner join vale into
> id=id_valuacion
> where estado=n
> order by cualquier_cosa;
>
> *//*
Buenos días a todos!!!!

Lei esto y me parecío curioso, ¿Cual es la diferencia a nivel de
ejecucion entre un JOIN y relacionar las tablas mediante el WHERE?....

Yo me acostumbre a usar los JOIN por varias razones (me era más fácil
leer los querys, podía hacer uso del LEFT y RIGHT) sin embargo, mis
compañeros dedicados a Oracle siguen utilizando la clausula WHERE ( y
creo que un operador "+" -no estoy seguro - para el caso del LEFT JOIN)

Mientras escribo esto se que mas de uno me va a decir que escriba un par
de sentencias y vea el explayn analize pero me interesaría una
explicacion más cientifica ( no sólo la prueba de que, en efecto, es más
rápido de una manera que de la otra)

Saludos!!!

--
_________________________________________
Miguel A. Ortega B.
Analista de Sistemas y Soporte a Usuarios
Technologies Consulting C.A.

---------------------------(fin del mensaje)---------------------------
TIP 2: puedes desuscribirte de todas las listas simultáneamente
(envíe "unregister TuDirecciónDeCorreo" a majordomo(at)postgresql(dot)org)

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/