Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/11/2013, 12:37
damimg
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años, 9 meses
Puntos: 15
Respuesta: Algo pasa con los WHERE cuando llevan LIKE '%%' ?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
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.
Una explicacion excelente gnzsoloyo, agrego una observacion sobre el uso del like.

Hay que tener en cuenta el uso que se le da al operador ya que al aplicarlo sobre un campo especifico omite el indice asociado a esa columna. Asi que, a tener cuidado jeje.

Saludos

damimg