Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/11/2013, 10:37
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Algo pasa con los WHERE cuando llevan LIKE '%%' ?

En primer lugar, usar un comodin de ambosl lados es una muy mala idea. Eso le indica al DBMS que busque lo que comience con cualquier cosa y lo que termine con cualquiier cosa, y eso es algo que sólo se puede resolver leyendo toda la tabla.
Este tipo de condiciones se debe evitar porque no sólo genra un full scan (es un espanto) sino que además desactiva todo índice que exista sobre ese campo.

Más allá de eso, usar "%%" simplemente es como si no existiese esa condición, porque le estás diciendo "devolveme todo, haya lo que haya".
¿Para qué lo pondrías entonces?

En tu consulta tenemos:
Código SQL:
Ver original
  1. SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
  2. FROM PLAYER
  3. WHERE
  4.     Player LIKE '%%'
  5.     AND Name LIKE '%test%'
  6.     AND LastName LIKE '%%'
  7.     AND Email LIKE '%%'
  8.     AND Password LIKE '%%'
  9.     AND Phone LIKE '%%'
  10.     AND Zip LIKE '%%'
  11.     AND STATUS = 'D
Si eliminamos lo superfluo, quedaría:

Código SQL:
Ver original
  1. SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
  2. FROM PLAYER
  3. WHERE
  4.     AND Name LIKE '%test%'
  5.     AND STATUS = 'D'
¿Por qué te edvuelve entonces cantidades distintas?
Bueno, voy a hacer una suposición, en base a mi experiencia en diferentes DBMS: El "%%" implica que debe haber ALGO en ese campo, aunque eso sea un espacio nulo o vacío, pero no debe ser NULL, ya que NULL no suele ser un dato, sino un estado.
Es probable que la consulta correcta fuese:

Código SQL:
Ver original
  1. SELECT IdPlayer, Player, Name, LastName, Email, Password, IdBook
  2. FROM PLAYER
  3. WHERE
  4.     Player IS NOT NULL
  5.     AND Name LIKE '%test%'
  6.     AND LastName IS NOT NULL
  7.     AND Email IS NOT NULL
  8.     AND Password IS NOT NULL
  9.     AND Phone IS NOT NULL
  10.     AND Zip IS NOT NULL
  11.     AND STATUS = 'D

Prueba y me dices.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)