SQL - COMO SE HARIA CON NOT EXISTS?

   
Vista:

COMO SE HARIA CON NOT EXISTS?

Publicado por ANTONIO (35 intervenciones) el 22/07/2009 11:59:04
Hola amigos estoy haciendo esta consulta sql con un " NOT IN " pero cuando hay que comparar entre muchos registros me va lento, he leido por internet con con "NOT EXISTS" es mucho mas rapdio pero me da error y no se como puede hacerse, abajo os dejo el codigo que uso por si veis como hacer la misma consulta pero con not exits
Saludos.


rst.Open("select APELLIDOS & ' | ' & NOMBRE & ' | ' & DNI AS TODO from inscritos where carrera='" & Session("usuario") & "'" & " and confirmado='OK' AND ISNULL(ELIMINADO) AND PROCEDENCIA='TPV' AND NOT ISNULL(AUTORIZACION) and dni not in(SELECT dni_cor FROM corredor IN '' [;DATABASE=" & Server.MapPath("CGI-BIN/CARRERAS/" & Session("BASEDATOS")) & "])", adodb, Global.ADODB.CursorTypeEnum.adOpenForwardOnly, Global.ADODB.LockTypeEnum.adLockReadOnly)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:COMO SE HARIA CON NOT EXISTS?

Publicado por LST (3 intervenciones) el 31/07/2009 03:49:50
CREO QUE TIENES MAS DE UNA OPCION..

1) POR LO QUE SE VE USAS EL QUERY DESDE ADO...TAL VEZ PODRIAS ENCRERRAR ESE QUERY EN UN PROCEDIMINETO ALMACENADO QUE CREAS TU, Y PASARLE LOS PARAMETROS A ESTE QUE USAS...

TAMBIEN SE VE QUE TRAES LO DE NOT IN DESDE OTRA BASE DE DATOS, DEBERIAS REVISAR LA VELOCIDAD SOLO CONECTANDOTE CON LA CONSULTA NOT IN A ESTA POR SI ESTO ES LO QUE HACE QUE ANDE LENTO.

2) SI NO QUIERES USAR UN STORED PROCEDURE, TAL VEZ PODRIAS CREARTE UNA VISTA EN TU BASE DE DATOS QUE TE TRAIGA LOS DATOS DEL NOT IN...Y DESPUES HACES EL RESTO DEL SELECT SOBRE ESTA VISTA

LA VISTA SERIA ALGO ASI

(SELECT dni_cor FROM corredor IN '' [;DATABASE=" & Server.MapPath("CGI-BIN/CARRERAS/" & Session("BASEDATOS")) & "])",

Y LUEGO USAS EL RESTO DEL SELECT SOBRE TU VISTA...PERO LAS VISTAS CREO QUE NO RECIBEN PARAMETROS, ASI QUE DEBERIAS REFINARLA BIEN SI QUIERES USAR ESA OPCION.

3) ACERCA DE TU NOT IN...CREO QUE QUEDARIA ASI SI LO CAMBIAS...

A) PRIMERO HAZ EL SELECT DEL NOT IN COMO UNA QUERY SEPARADA...

SELECT dni_cor INTO ##TABLA_TEMPORAL FROM corredor IN '' [;DATABASE=" & Server.MapPath("CGI-BIN/CARRERAS/" & Session("BASEDATOS")) & "])

B) LUEGO HAZ LA CRUZA DE TU CONSULTA CON LOS DATOS DE TU TABLA TEMPORAL CON NOT IN O USANDO EXISTS O USANDO NOT EXISTS

rst.Open("select APELLIDOS & ' | ' & NOMBRE & ' | ' & DNI AS TODO from inscritos where carrera='" & Session("usuario") & "'" & " and confirmado='OK' AND ISNULL(ELIMINADO) AND PROCEDENCIA='TPV' AND NOT ISNULL(AUTORIZACION) and dni not in( ##TABLA_TEMPORAL )", adodb, Global.ADODB.CursorTypeEnum.adOpenForwardOnly, Global.ADODB.LockTypeEnum.adLockReadOnly)

RECUERDA BORRAR TU TABLA TEMPORAL MEJOR AL FINAL (DROP TABLE ##TABLA_TEMPORAL )

TE RECOMIENDO DE TODAS FORMAS USAR UN PROCEDIMIENTO ALMACENADO PARA ENCERRAR ESTO, ES MAS RAPIDO SIN DUDA

SALUDOS DESDE CHILE
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:COMO SE HARIA CON NOT EXISTS?

Publicado por ANTONIO (35 intervenciones) el 31/07/2009 09:08:24
MUCHAS GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar