FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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 Modificaria dos registros, por lo que el resultado de Devolvería 2 Sim embargo la consulta Modificaría un solo registro, por lo que al lanzar la consulta 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) |
#3
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|