2011-01-06 2 views
6

Я долгое время думал о том, как это сделать, и я знаю, что у какого-то гения на этом сайте будет ответ. В основном я пытаюсь это сделать:Dynamic Like Statement в SQL

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

для поиска строк поиска, хранящихся в столбце таблицы. Очевидно, что я не могу сделать оператор вроде для каждой строки вручную, потому что я хочу, чтобы таблица была динамической.

Любые предложения были бы замечательными. : D

EDIT:

Я использую MSSQL :(

+0

, какую базу данных вы используете? Постоянно ли число строк? –

+0

является динамической таблицей или таблицей, содержащей столбец с string1/string2/string3 или что вы ищете в чем? –

+0

О, может быть, имя столбца известно, но вы не знаете, сколько «похожих» сравнений вам нужно до времени выполнения? Ну, в этом случае я все равно вижу свой ответ, поскольку он работает для этого тоже (если вы используете MSSQL, конечно) – user44298

ответ

17

Поместите параметры (строка1, строка2, string3 ...) в таблицу (Params), затем JOIN к столу с использованием LIKE в положение JOIN например,

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

oh ничего себе. Как я мог не подумать об использовании внутреннего соединения таким образом? Спасибо. : D – Derwent

0

Похоже, вы пытаетесь сделать поиск полнотекстовый MySQL имеет инструмент для этого:.
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) 

В случае MSSQL некоторая информация доступна по адресу:
http://msdn.microsoft.com/en-us/library/cc879300.aspx

+0

Да, я пытаюсь выполнить полнотекстовый поиск с многократными словами, но я использую MSSQL. Я мог бы изменить это решение MySQL, чтобы делать то, что хочу, но есть ли функция совпадения MSSQL? – Derwent

+0

Да, это здесь, на второй ссылке в ответе - это я наверху http://msdn.microsoft.com/en-us/library/ms142538.aspx – user44298

+0

Прохладный, это действительно происходит. Большое спасибо за вашу помощь. Я могу делать то, что хочу делать с WHERE CONTAINS (столбец, 'searchstring1' OR 'searchstring2' OR 'searchstring3'), но то, что я хочу, является тем, что генерирует соответствующий поиск из отдельной таблицы строк поиска. мы говорим о 5 или 6 поисковых терминах, которые включают символы wild-card и другие странные вещи. Есть ли способ генерировать оператор, эквивалентный 'searchstring1' OR 'searcstring2' OR 'searchstring3' ...для каждого элемента в списке поисковых строк? – Derwent

1

Сделайте образец Table_1:

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

Чтобы найти весь код Фредс и Jos вы

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

То, что вы хотели бы это динамический WHERE. Вы можете добиться этого, поставив символы в Table_2:

id Search 
1 Fred% 
2 Jo% 

и выполнять прочие, с INNER JOIN:

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

Результат:

id Name id Search 
1 Fred 1 Fred% 
3 Frederick 1 Fred% 
2 Joe 2 Jo% 
4 Joseph 2 Jo% 
Смежные вопросы