[AYUDA] SQL Query

Iniciado por Miseryk, 27 Noviembre 2014, 18:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Miseryk

Buenas tardes a todos, no sé si realmente ésto va acá o en Programación General, bueno mi cuestión es la siguiente:

Yo tengo una consulta como por ejemplo Select * From tbNombres;

La cual me puede traer muchos nombres, como "Pepe", "Juan", etc. El punto es que si quiero filtrar ciertos nombres como Pepes, Juan y otros más, que el query no se me haga de 5 renglones, ya que actualmente estoy usándolo de la siguiente manera:

Código (sql) [Seleccionar]

SELECT * FROM tbNombres Where Name!='Pepe' AND Name!='Juan' AND Name!='Carlos' AND Name!='Luis' AND Name!='Alberto' AND Name!='Horacio' AND Name!='Tito' AND Name!='Marito' AND Name!='Oscar' AND Name!='Julieta' AND Name!='Florencia' AND Name!='Rocatalegiata' AND Name!='Raul' AND ...


Es decir que tengo una tabla con miles de nombres y no quiero que me traiga unos 200 determinados, tal vez esté haciendo mal el query, lo cual es probable porque no sé programar en SQL, alguno me podría orientar?

Desde ya muchas gracias, sigo buscando mientras (Y)
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

HdM

#1
Para acortar code podrías usar WHERE name NOT IN (). Podrías crearte una tabla auxiliar que contenga todos los nombres que no quieres (sería más fácil de mantener que no tener que estar tocando los fuentes sin parar) y luego descartarlos con una subconsulta. Un ejemplo por si te sirve:

http://www.java2s.com/Tutorial/MySQL/0040__Select-Query/UsingNOTINwithsubquery.htm

EDIT: ¿qué tienen en común todos esos nombres para que quieras excluirlos? ¿algún valor en algún campo? Igual lo estás complicando demasiado y es suficiente con filtrar por ese campo.

Saludos.


- Nice to see you again -

Miseryk

Cita de: HdM en 27 Noviembre 2014, 21:45 PM
Para acortar code podrías usar WHERE name NOT IN (). Podrías crearte una tabla auxiliar que contenga todos los nombres que no quieres (sería más fácil de mantener que no tener que estar tocando los fuentes sin parar) y luego descartarlos con una subconsulta. Un ejemplo por si te sirve:

http://www.java2s.com/Tutorial/MySQL/0040__Select-Query/UsingNOTINwithsubquery.htm

EDIT: ¿qué tienen en común todos esos nombres para que quieras excluirlos? ¿algún valor en algún campo? Igual lo estás complicando demasiado y es suficiente con filtrar por ese campo.

Saludos.



El tema es que no puedo crear tablas, en realidad dí un ejemplo básico para que se tenga una idea, pero realmente es un hook en windows y patcheo un query, entonces con el tema de la memoria quería limitar la longitud y de paso entender como optimizarlo.

Por lo que estuve viendo el NOT IN necesita un query adentro como SELECT, se puede hacer algo como:

Código (sql) [Seleccionar]

... WHERE Name NOT IN ('Pepe', 'Juan' ....)???


Saludos.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

Miseryk

Bueno, por los pocos ejemplos que encontré era de la manera la cual pregunté, aunque al SO no le gusta y explota, pero bueno ahora sé como se puede optimizar, gracias (Y)

Saludos.
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

Shell Root

#4
Puedes crear tablas temporales, tiene vida sólo en la ejecución de un bloque de código:


  • Crear tabla temporal.
  • Insertar registros desde un archivo tipo .csv a la tabla temporal. (Con los registros que no quieras mostrar)
  • Ejecutar una query SELECT ... FROM ... WHERE ... NOT IN (SELECT ... FROM ... WHERE ...)

En código sería algo como:
Código (sql) [Seleccionar]
-- Crear tabla temporal
CRATE TABLE #tmpNotIn(Nombre VARCHAR(50) NOT NULL);
GO

-- Llenar tabla temporal con los registros que no quieras mostrar
-- Formato del archivo sería:
--
-- Filename = NotIn.csv
--
--    [A]
-- [1] USUARIO
-- [2] Raul
-- [3] Pepe
-- [4] Juan
-- [5] Carlos
-- [6] ...etc...

-- FIRSTROW # Fila desde donde empieza a ingresar, para no tomar el titulo de USUARIO
-- ROWTERMINATOR # Delimitador de terminación de registro para pasar al proximo
BULK INSERT #tmpNotIn FROM 'PATH_FILE' WITH (FIRSTROW = 2, ROWTERMINATOR = '\n' )
GO

-- Selección de datos
SELECT * FROM tblUsuario WHERE Nombre NOT IN (SELECT Nombre FROM #tmpNotIn)


PD1: No tengo SQL en este momento para probar si esta bien el código que te dejo, lo hice de memoria puede estar con errores.
PD2: además puedes utilizar procedimiento almacenados
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.