2011-01-06 23 views
6

Mi sono tormentato su come farlo per un po ', e so che un po' di genio su questo sito avrà la risposta. Fondamentalmente sto cercando di farlo:Istruzione dinamica simile in SQL

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

per un elenco di stringhe di ricerca memorizzate in una colonna di una tabella. Ovviamente non posso fare una dichiarazione simile per ogni stringa a mano perché voglio che la tabella sia dinamica.

Qualsiasi suggerimento sarebbe ottimo. : D

EDIT:

sto usando MSSQL :(

+0

quale database stai usando? Il numero di stringhe è costante? –

+0

è 'table' dynamic, o una tabella contenente una colonna con string1/string2/string3 o cosa stai cercando in cosa? –

+0

Oh forse il nome della colonna è noto ma non sai quanti "mi piace" di confronto hai bisogno fino al momento dell'esecuzione? Bene, in questo caso, si veda la mia risposta comunque perché funziona anche per questo (se si sta utilizzando MSSQL ovviamente) – user44298

risposta

17

Mettere i parametri (string1, string2, string3 ...) in una tabella (Params) poi JOIN alla tabella utilizzando LIKE clausola JOIN esempio

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

oh wow. Come potevo non aver pensato di usare un Inner join in questo modo? Grazie mille. : D – Derwent

0

Suona come si sta cercando di fare una ricerca full-text di MySQL ha uno strumento per questo:.
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) 

In caso di MSSQL alcune informazioni sono disponibili al
http://msdn.microsoft.com/en-us/library/cc879300.aspx

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

Sì, sto cercando di eseguire una ricerca full-text con più parole, ma sto utilizzando MSSQL. Potrei modificare quella soluzione MySQL per fare ciò che voglio, ma esiste una versione MSSQL della funzione match? – Derwent

+0

Sì, è qui sul secondo link della risposta - questo in cima a http://msdn.microsoft.com/en-us/library/ms142538.aspx – user44298

+0

Cool, Questo è davvero arrivare lì. Grazie mille per il vostro aiuto. Posso fare quello che voglio fare con un WHERE CONTAINS (colonna, 'searchstring1' O 'searchstring2' OR 'searchstring3') ma quello che voglio è qualcosa che genera la ricerca appropriata da una tabella separata di stringhe di ricerca. stiamo parlando di 5 o 6 termini di ricerca che includono caratteri jolly e altre cose strane. C'è un modo per generare una dichiarazione equivalente a 'searchstring1' OPPURE 'searcstring2' OP 'searchstring3' ...per ogni articolo in un elenco di stringhe di ricerca? – Derwent

1

Fai un Table_1 campione:

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

Per trovare tutto il codice Freds e Jos si

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

Cosa vuoi è una dinamica WHERE. È possibile raggiungere questo mettendo i caratteri jolly in Table_2:

id Search 
1 Fred% 
2 Jo% 

ed eseguendo il LIKE con un INNER JOIN:

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

Risultato:

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