FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como mejorar sentencia "not in"
Buenas tardes a todos y gracias por anticipado.
Tengo un problema de tiempos con una consulta. Tengo dos tablas, pacientes y estudios. Cuando se borran un nº determinado de estudios, quiero consultar cuales son los pacientes que "ya no tienen estudios", (ya que han sido borrados anteriormente). Esto lo hago asi: select paciente.id_paciente from paciente where paciente.id_paciente not in (select id_paciente from estudios) El problema es que es muy lento. He intentado hacer esto tb: select paciente.id_paciente from paciente, estudios where paciente.id_paciente <> estudios.id_paciente Pero no devuelve lo que espero, me devuelve registros que existen en paciente. Alguna ayudita. Muchas gracias. |
#2
|
||||
|
||||
__________________
Piensa siempre en positivo ! |
#3
|
||||
|
||||
Y si tu motor de base de datos no admite "left join" puedes ver si funciona así:
|
#4
|
|||
|
|||
Muchas gracias por ayudarme tan pronto.
Lo cierto es que uso Interbase y estoy intentando traducirlo con el Ib console, pero me falla algo... :S, select paciente.id_paciente,estudios.id_paciente as Tiene_Estudios from paciente left join paciente.id_paciente on estudios.id_paciente = paciente.id_paciente where tiene_estudios is null Estoy viendo si consigo resolverlo. De nuevo gracias Editado, Para comprender el error en ibconsole lo pongo todo en una linea seguido. El error me lo devuelve en left join paciente. (aqui) despues del punto. Me dice "Token unknown". linea 1 character 99. |
#5
|
||||
|
||||
__________________
Piensa siempre en positivo ! |
#6
|
|||
|
|||
Muchas gracias de nuevo por ayudarme, de veras, no quiero ser pesado.
Corregido el error, ahora me dice que la columna Tiene_estudios es desconocida. select paciente.id_paciente, estudios.id_paciente as Tiene_Estudios from paciente left join estudios on estudios.id_paciente = paciente.id_paciente where tiene_estudios is null Tambien he comprobado que interbase permite hacer el "as", por lo que ahora no se que mas probar. |
#7
|
|||
|
|||
Gluglu, he conseguido ejecutarla de esta manera, sin el as, y sigue igual de lento.
select paciente.id_paciente, estudios.id_paciente from paciente left join estudios on estudios.id_paciente = paciente.id_paciente where estudios.id_paciente is null Con el As, me genera el error que no consigo solucionar. Muchas gracias por vuestro tiempo chicos/as. Un saludo. |
#8
|
||||
|
||||
No conozco el tamaño de tu Base de Datos y de las tablas que mencionas. Pero si te parece lenta la respuesta es porque seguro no utilizas índices. Consulta en el foro acerca de los índices en Interbase. Te saldrá mucha información al respecto.
El uso de índices referenciados a tus claves primarias acelerará tu consulta de manera dramática.
__________________
Piensa siempre en positivo ! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Comentario "aplastante" contra los que atacan la "piratería" | Casimiro Notevi | La Taberna | 12 | 07-03-2010 14:03:02 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
¿cuál es mejor: "close" o "application.terminate"? | unreal4u | Varios | 5 | 05-03-2007 11:01:19 |
porque no me reconoce los caracteres "*" ni "%" cuando filtro | mrmago | Conexión con bases de datos | 10 | 27-01-2006 04:21:16 |
|