2011-01-06 31 views
6

He estado analizando mi cerebro sobre cómo hacer esto por un tiempo, y sé que algún genio en este sitio tendrá la respuesta. Básicamente estoy tratando de hacer esto:Declaración dinámica similar en SQL

SELECT column 
    FROM table 
WHERE [table].[column] LIKE string1 
     OR [table].[column] LIKE string2 
     OR [table].[column] LIKE string3... 

para obtener una lista de cadenas de búsqueda almacenadas en una columna de una tabla. Obviamente no puedo hacer una declaración similar para cada cadena a mano porque quiero que la tabla sea dinámica.

Cualquier sugerencia sería genial. : D

EDIT:

estoy usando MSSQL :(

+0

qué base de datos se utiliza? ¿El número de cadenas es constante? –

+0

es 'tabla' dinámica, o una tabla que contiene una columna con string1/string2/string3 o ¿qué estás buscando en qué? –

+0

Oh, tal vez se conoce el nombre de la columna, pero no sabes cuántas comparaciones "me gusta" necesitas hasta el momento de la ejecución. Bueno, en este caso, vea mi respuesta de todos modos, ya que también funciona (si está usando MSSQL, por supuesto) – user44298

Respuesta

17

poner los parámetros (cadena1, cadena2, string3 ...) en una tabla (Params) entonces JOIN a la tabla usando LIKE la cláusula JOIN por ejemplo

SELECT column 
    FROM table AS T1 
     INNER JOIN Params AS P1 
      ON T1.column LIKE '%' + P1.param + '%'; 
+1

oh wow. ¿Cómo no podría haber pensado en usar una unión interna de esta manera? Muchas gracias. :RE – Derwent

0

Suena como usted está tratando de hacer una búsqueda de texto completo de MySQL tiene una herramienta para esto:.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

SELECT column FROM table MATCH (column) AGAINST ('string1 string2 string3' IN BOOLEAN MODE) 

En caso de MSSQL, alguna información está disponible en
http://msdn.microsoft.com/en-us/library/cc879300.aspx

SELECT column FROM table WHERE CONTAINS (column , 'string1 string2 string3'); 
+0

Sí, estoy tratando de hacer una búsqueda de texto completo con palabras de varias páginas, pero estoy usando MSSQL. Podría modificar esa solución MySQL para hacer lo que quiero hacer, pero ¿hay una versión MSSQL de la función de coincidencia? – Derwent

+0

Sí, está aquí en el segundo enlace de la respuesta, esta en la parte superior. Http://msdn.microsoft.com/en-us/library/ms142538.aspx – user44298

+0

Genial, esto realmente está llegando. Muchas gracias por tu ayuda. Puedo hacer lo que quiero hacer con WHERE CONTAINS (columna, 'searchstring1' O 'searchstring2' O 'searchstring3') pero lo que quiero es algo que genere la búsqueda adecuada de una tabla separada de cadenas de búsqueda. estamos hablando de 5 o 6 términos de búsqueda que incluyen caracteres comodín y otras cosas raras. ¿Hay alguna forma en que pueda generar una declaración equivalente a 'searchstring1' O 'searcstring2' O 'searchstring3' ...para cada elemento en una lista de searchstrings? – Derwent

1

Hacer un table_1 muestra:

id Name 
1 Fred 
2 Joe 
3 Frederick 
4 Joseph 
5 Kenneth 

permite encontrar todos los códigos de Fred y Jos que

SELECT 
    * 
FROM 
    Table_1 
WHERE 
    name like 'Fred%' OR 
    name like 'Jo%' 

Lo que desea es una dinámica WHERE. Usted puede lograr esto poniendo los comodines en Table_2:

id Search 
1 Fred% 
2 Jo% 

y realizar el LIKE con un INNER JOIN:

SELECT 
    * 
FROM 
    Table_1 INNER JOIN Table_2 
     ON Table_1.name LIKE Table_2.search 

Resultado:

id Name id Search 
1 Fred 1 Fred% 
3 Frederick 1 Fred% 
2 Joe 2 Jo% 
4 Joseph 2 Jo%