Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2006
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Select anidado

Hola ¿cómo andan? Espero que todo bien.
Estoy trabajando en el desarrollo de un software que busca genes en genomas de distintos organismos. Tengo dos tablas, una que se llama GenesOriginal, donde tengo almacenados los genes conocidos para el organismo que estoy estudiando, y otra que se llama GenesSoft donde tengo almacenados los genes que encuentra mi algoritmo.
Una vez que tengo cargadas las dos tablas, lo que quiero es hacer una comparación entre estas para saber que genes encontró mi algoritmo y que pertencen al organismo, cuales no, etc. Para esto uso un select anidado. La cuestión es que el resultado que obtengo no es el mismo si trabajo sobre una tabla o sobre otra, y a mi me parece que debería obtener lo mismo.

La sentencia que utilizo para trabajar sobre la tabla GenesOriginales es la siguiente:

Update GenesOriginal
Set Encontrado = True
where pkGenesOriginal in (Select pkGenesOriginal from GenesOriginal
where InicioGen in (Select InicioGen from GenesSoft)
or FinGen in (Select FinGen from GenesSoft))

donde Encontrado es una variable que inicialmente está seteada a False y cuyo valor cambia si algun gen de GenesSoft tiene el mismo inicio (InicioGen) o el mismo fin (FinGen) que un gen de la tabla GenesOriginal.

Después de esto ejecuto: Select count(pkGenesOriginal) from GenesOriginal where Encontrado = True, y obtengo, por ejemplo 467.

Ahora, la sentencia que utilizo para trabajar sobre la tabla GenesSoft es la siguiente:

Update GenesSoft
Set Encontrado = True
where pkGenesSoft in (Select pkGenesSoft from GenesSoft
where InicioGen in (Select InicioGen from GenesOriginal)
or FinGen in (Select FinGen from GenesOriginal))

Después de esto ejecuto: Select count(Soft) from GenesSoft where Encontrado = True, y obtengo, en este caso 462.

¿porqué resultados diferentes? ¿no debería obtener el mismo número?

Desde ya muchas gracias, saludos a todos

Erika
Responder Con Cita
  #2  
Antiguo 02-02-2006
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Las dos consulta serían iguales solo en el caso de que los campos FinGen e InicioGen sean únicos. Si se puede dar la casualidad de que dos registros puedan tener el mismo FinGen o el mismo InicioGen las consultas no tendrían porque dar el mismo resultado.

Por ejemplo si tienes las siguiente tablas

GenesOriginal --> Registros
GEN FINGEN INICIOGEN
1 AA BB
2 AC DF
3 AF BB

GenesSoft --> Registros
GEN TINGEN INICIOGEN
1 AA BB

En este caso la consulta
Código SQL [-]
Update GenesOriginal
Set Encontrado = True
where pkGenesOriginal in (Select pkGenesOriginal from GenesOriginal
where InicioGen in (Select InicioGen from GenesSoft)
or FinGen in (Select FinGen from GenesSoft))
Modificaria dos registros, por lo que el resultado de
Código SQL [-]
Select count(pkGenesOriginal) from GenesOriginal where Encontrado = True
Devolvería 2

Sim embargo la consulta
Código SQL [-]
Update GenesSoft
Set Encontrado = True
where pkGenesSoft in (Select pkGenesSoft from GenesSoft
where InicioGen in (Select InicioGen from GenesOriginal)
or FinGen in (Select FinGen from GenesOriginal))
Modificaría un solo registro, por lo que al lanzar la consulta
Código SQL [-]
Select count(Soft) from GenesSoft where Encontrado = True
Obtendrías como resultado 1.

Espero haberme explicado y que te sirva de ayuda.

Un saúdo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #3  
Antiguo 02-02-2006
erika.martinez erika.martinez is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires - Argentina
Posts: 18
Poder: 0
erika.martinez Va por buen camino
Si, entiendo, y tenés razón. Pasa que supuestamente deberían darme igual, pero debo tener un error en la carga de los datos.
Muchas gracias por tu respuesta.
Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Función en Procedimientos Almacenados Jalisia Firebird e Interbase 1 04-11-2005 15:13:16
5 select de 5 tablas diferentes en un select solo sakuragi SQL 6 15-06-2005 18:57:06
Select anidado: Select from (select....) Malon SQL 2 14-10-2004 14:01:24
Select anidado ( Select from select ) Malon Firebird e Interbase 1 05-10-2004 04:14:38
Select anidados Ignacio SQL 5 23-02-2004 16:33:30


La franja horaria es GMT +2. Ahora son las 00:37:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi