SQL - Consulta con like

 
Vista:

Consulta con like

Publicado por Juan (5 intervenciones) el 22/02/2017 23:58:14
Buenas Amigos tengo la siguiente consulta

Select * from pais where Alias LIKE '%US%

.....
Me regresa lo siguiente
id = 0
name = AUSTRALIA
alias=AUSTRALIA

Y tambien me regresa
id=5
name=ESTADOS UNIDOS
alias=USA,US,EUA

.....

Quisiera que solo me regrese los valores de estados unidos, alguna sugerencia de como podria hacerlo??
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
Imágen de perfil de xve
Val: 135
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta con like

Publicado por xve (284 intervenciones) el 23/02/2017 08:36:10
El problema que tienes Juan, es que la estructura de tu base de datos no es del todo correcta, por eso tienes ese problema.

La manera correcta, es que alias fuera una tabla externa vinculada, entonces no tendrías estos problemas.

Lo único que se me ocurre, es que crees dicha tabla, ya que puede darse el caso, de que exista un alias con unicamente US, sin comas, verdad?
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
sin imagen de perfil

Consulta con like

Publicado por Jeanpierre (6 intervenciones) el 23/02/2017 15:55:48
Has Intentado sin el Like o sea algo mas común:

SELECT * FROM PAIS WHERE PAIS = 'USA'

Espero haberte ayudado
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

Consulta con like

Publicado por Juan (5 intervenciones) el 23/02/2017 16:18:18
Claro que si eh intentado sin el like, pero no me arroja el resultado que deseo. Muchas gracias por tu comentario JeanPierre
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

Consulta con like

Publicado por Juan (5 intervenciones) el 23/02/2017 16:15:23
Gracias por tu respuesta xve, estas en lo correcto solo que como es una base de datos ya definida quería ver si existía la posibilidad de poder solucionarlo sin la necesidad de crear otra tabla, pero como tu me lo sugieres si lo mas factible sera el crear otra tabla para evitar ese tipo de problemas. 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

Consulta con like

Publicado por Juan (5 intervenciones) el 23/02/2017 16:21:04
Gracias por tu respuesta xve, estas en lo correcto solo que como es una base de datos ya definida quería ver si existía la posibilidad de poder solucionarlo sin la necesidad de crear otra tabla, pero como tu me lo sugieres si lo mas factible sera el crear otra tabla para evitar ese tipo de problemas. 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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta con like

Publicado por leonardo_josue (1173 intervenciones) el 23/02/2017 16:35:46
Hola Juan:

Coincido con xve al decirte que tienes un mal modelo de BD's así es que si puedes modificarlo, hazlo y evita dolores de cabeza futuros. Ahora bien, si de plano no puedes modificar tus tablas y tienes que trabajar con lo que hay, aquí te va una solución un poco "tramposa"

En primer lugar, el problema es que estás manejando un campo multivaluado para los alias, es decir, puedes almacenar más de un valor en un campo, lo cual forma parte del error de diseño que ya te comentamos. Ahora bien, al hacer esto tienes varias formas en las que puedes almacenar un alias:

1. Un único alias (ej. alias = 'US')
2. Dos alias, separados por comas ('US,USA') o ('USA,US')
3. Tres o más alias, separados por comas ('US,USA,EUA')

en este último caso entonces tu alias puede estar al INICIO (US,...), en medio (...,US,...) o al final (...,US) de la cadena.

Por lo tanto, si quisieras buscar sólo un alias en particular tendrías que hacer uso del LIKE para cada uno de los casos, es decir, hacer algo así:

1
2
3
4
5
6
7
SELECT *
FROM pais
WHERE
  alias = 'US' --> esta condición para cuando sólo tienes un alias
  OR alias LIKE 'US,%' --> esta condición para cuando el alias está en la primer posición
  OR alias LIKE '%,US,%' --> esta condición para cuando el alias está en una posición intermedia
  OR alias LIKE '%,US' --> esta condición para cuando el alias está en la última posición

Este código te puede servir sin embargo ES TERRIBLE, las condiciones tipo LIKE tienen un pésimo rendimiento y debes tratar de evitarlas en la medida de lo posible.

Insisto, si puedes cambiar tu modelo de tablas HAZLO.

Saludos
Leo.
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

Consulta con like

Publicado por Juan (5 intervenciones) el 23/02/2017 16:53:24
Muchas gracias Leo

Te comento que exactamente ese era mi problema que estaba manejando un campo multivaluado separado por comas, con la consulta que me proporcionaste pude solucionar mi problema.

Pero como ustedes comentan lo mas viable sera cambiar mi modelo de BD, ya que si me seria de mayor utilidad evitar este tipo de problemas en un futuro.

Te agradezco tu respuesta y esto me servirá en lo que mejoro mi modelo de BD. GRACIAS!!

Saludos
Juan.
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