elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  IN() estricto...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: IN() estricto...  (Leído 3,267 veces)
Maox

Desconectado Desconectado

Mensajes: 55



Ver Perfil WWW
IN() estricto...
« en: 13 Diciembre 2009, 17:27 pm »

Hola, buenos dias, hace mucho no entraba por aqui, mucho ni me conocen..XD
siempre vengo a traerles problemas :D espero que a alguien se le haya ocurrido o alguien sepa.

Mi preguta es la siguiente: hay forma de hacer en SQL para Mysql algo parecido a SELECT x FROM tbl WHERE colx IN(1,2,3); pero de forma estricta?, me explico, quiero hacer un SELECT que me devuelva todos los x con y solamente loa valores en el IN() (eneste caso 1,2,3), para mas explicacion la tabla seria esta:

x->1,1,2,1
colx->1,2,3,3
*nota:respectivamente

para que el resultado sea: 1

pero si la tabla es esta:

x->1,1,2
colx->1,2,3
*nota:respectivamente

 para que el resultado sea ninguno ya que solo cumple con colx 1 y 2

seria algo como SELECT x FROM tbl WHERE colx=1 AND colx=2 AND colx=3.. o algo asi..XD

cualquier comentario, ayuda o respuesta sera bienvenida y desde ya muchas gracias la verdad que ni googleando encntre algo que me ayudara

edit by me: las tablas no siven..XD

/delete


« Última modificación: 13 Diciembre 2009, 17:57 pm por Maox » En línea

www.hackerss.com
foro.colombiaunderground.org
www.hackyashira.com
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: IN() estricto...
« Respuesta #1 en: 13 Diciembre 2009, 22:16 pm »

Yo no entiendo muy del todo tu solicitud, disculpa.

Hasta lo que he podido interpretar, me he imaginado que tienes 2 tablas una llamada colx la otra sencillamente x y que ambas tienen datos en comun pero que le falta a la otra y viceversa. Y segun creo tu quieres solicitar los datos de X campo en una tabla donde estos concuerden completamente con los de la tabla Y de lo contrario no se retorne ningun valor?

Por ejemplo si la tabla X tiene de campos (1,2,3) y la tabla Y tiene de campos (1,2,4) y yo hiciese SELECT * FROM X WHERE CAMPO IN(1,2,5)  no te retorne nada ya que los datos concuerdan en los valores 1 y 2 con la tbla Y pero no concuerdan con ningun 5.

Ten pendiente que los valores dentro de la funcion IN() es un rango de valores, no son valores constantes explicitos que indiquen que sino se cumplen todos retorne nada, aca es un rango si concuerdan 1 o 2 o mas se retornan estos el resto que no concuerde se obvia. (Creo que ya te diste cuenta de esto).

Entonces como la funcionalidad como tal de la funcion IN() no la puedes variar ni cambiar, tendras que hacer un rejuego de logica para llegar a tu objetivo, o hacerlo mediante un lenguaje de programacion o hacerlo mediante procedimientos almacenados. Pero suponiendo un ejemplo de tu peticion en lenguaje SQL:

Imagina un escenario de 2 tablas:

Código
  1.  
  2. mysql> SELECT * FROM copia;
  3. +------+-----------+      
  4. | DATA | apellidos |      
  5. +------+-----------+      
  6. |    1 | Lopez     |      
  7. |    2 | Sanchez   |      
  8. |    2 | Sanz      |      
  9. |    5 | Heredia   |      
  10. |    4 | Mendeira  |      
  11. +------+-----------+
  12. 5 ROWS IN SET (0.00 sec)
  13.  
  14. mysql> SELECT * FROM ejemplo;
  15. +-------+---------+
  16. | datos | nombres |
  17. +-------+---------+
  18. |     1 | Maria   |
  19. |     2 | Juan    |
  20. |     2 | Raul    |
  21. |     3 | Ruben   |
  22. |     4 | Carlos  |
  23. +-------+---------+
  24. 5 ROWS IN SET (0.00 sec)
  25.  
  26.  

Supongamos que yo quiero, todos los campos 'datos' de la tabla ejemplo que tenga un rango de numeros del 1,2 y un tercer numero que me servira de variable para mi busquedad  ;)

Código
  1.  
  2. mysql> SELECT ejemplo.* FROM ejemplo INNER JOIN copia WHERE copia.DATA = 4 AND datos IN(1,2,copia.DATA);
  3. +-------+---------+
  4. | datos | nombres |
  5. +-------+---------+
  6. |     1 | Maria   |
  7. |     2 | Juan    |
  8. |     2 | Raul    |
  9. |     4 | Carlos  |
  10. +-------+---------+
  11. 4 ROWS IN SET (0.00 sec)
  12.  
  13.  

En lo anterior el prefijo que mayormente se valida es el contenido de copia.data, los demas campos dentro de la funcion IN() '1 y 2' son constantes en este caso, y siempre se retornaran junto al tercer campo misterioso, siempre y cuando el tercer campo realmente exista en la tabla donde lo solicito. Por ende si existiera el numero 8 en el campo data de la tabla Copia, se va a retornar los valores unicos existentes '1 y 2' de la tabla ejemplo. Asi que mucho cuidado con esto, puesto que la validacion aca recae sobre la existencia del valor en la tablar Copia.

Ahora imaginate que hago una busquedad con un valor que Si existe en la tabla ejemplo, pero no existe en la tabla Copia:

Código
  1.  
  2. mysql> SELECT ejemplo.* FROM ejemplo INNER JOIN copia WHERE copia.DATA = 3 AND datos IN(1,2,copia.DATA);
  3. Empty SET (0.00 sec)
  4.  
  5. mysql> SELECT * FROM ejemplo;
  6. +-------+---------+
  7. | datos | nombres |
  8. +-------+---------+
  9. |     1 | Maria   |
  10. |     2 | Juan    |
  11. |     2 | Raul    |
  12. |     3 | Ruben   |
  13. |     4 | Carlos  |
  14. +-------+---------+
  15. 5 ROWS IN SET (0.00 sec)
  16.  
  17.  

El retorno es ninguno puesto que el valor 3 si existe en la tabla ejemplo, pero no existe en la tabla copia. Y aca el tercer campo misterioso que se le pasa a la funcion IN() es el valor que deseas buscar y que debe existir en realidad en la tabla copia, de lo contrario retorna nada.

Si juegas un poquito mas con la logica, podras implementar los 3 valores deseados dentro del IN() que se cumplan los 3 para retorno de valor o si falta alguno retorne nada.... todo es darle la vuelta a la logica del tema. O irse por el camino mas comodo pero un poco mas largo, 'programacion'


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No consigo validar W3C xhtml estricto
Desarrollo Web
SuXoR 3 4,407 Último mensaje 26 Noviembre 2010, 01:40 am
por seele
Que es aliasing y aliasing estricto?
Programación C/C++
geeke 3 2,032 Último mensaje 15 Enero 2015, 13:34 pm
por MeCraniDOS
Cloudflare firewall muy estricto
Sugerencias y dudas sobre el Foro
MinusFour 6 4,378 Último mensaje 18 Mayo 2016, 22:55 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines