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/