Как я могу использовать T-Sql для поиска текста в Field1 в любом месте в Table1 и связать результирующие строки? - PullRequest
1 голос
/ 21 июня 2011

У меня есть TableA(PID, Searchforthistext, TextToBeSearched) со следующими данными

PID,SearchforthisText,TextToBeSearched
1,'have a nice day','I hope you have a nice day'
2,'having a bad day','I am having a bad day because of the wheather'
3,'it is a wonderful day','I hope you have a nice day because it is a wonderful day'
4,'because of the wheather','I am sorry your day is bad because of the wheather'
5,'Goodby for now','I will have a nice day but goodby for now'

Мне нужно иметь возможность искать текст и присоединять номер PID для записей, которые попали, поэтому, например, мне нужны результаты сверху, чтобы дать мне:

PIDSearched, PIDResults
1,1
1,3
1,5
2,2
2,4
3,3
4,2
4,4
5,5

Я попытался найти положение текста, а затем использовать функции подстроки и самостоятельного объединения, но я не могу заставить работать эффективный набор запросов. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Как отмечает djacobson, кажется, есть серьезная проблема с вашей схемой.Тем не менее, это должно технически делать то, что вы хотите.Производительность может быть проблемой:

SELECT
    T2.pid AS pid_searched,
    T1.pid AS pid_results
FROM
    My_Table T1
INNER JOIN My_Table T2 ON
    T2.text_to_be_searched LIKE '%' + T1.search_for_this_text  + '%'
0 голосов
/ 21 июня 2011

Вот мой взгляд на это:

SELECT * INTO #TableA
FROM (
    SELECT 1 PID,'have a nice day' SearchforthisText,'I hope you have a nice day' TextToBeSearched
    UNION SELECT
    2,'having a bad day','I am having a bad day because of the wheather'
    UNION SELECT
    3,'it is a wonderful day','I hope you have a nice day because it is a wonderful day'
    UNION SELECT
    4,'because of the wheather','I am sorry your day is bad because of the wheather'
    UNION SELECT
    5,'Goodby for now','I will have a nice day but goodby for now'
) X;

WITH Patterns AS (
  SELECT PID, SearchforthisText Pattern
  FROM #TableA
), Phrases AS (
  SELECT PID, TextToBeSearched Phrase
  FROM #TableA
)
SELECT Patterns.PID, Phrases.PID
FROM Patterns, Phrases
WHERE CHARINDEX(Patterns.Pattern, Phrases.Phrase) > 0;

DROP TABLE #TableA;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...