1

テーブルから行を取得し、分割されたすべての文字列を関連テーブルに挿入するクエリを作成する必要があります。

例:

テーブルKeywordsには次の行があります。

Id   Name 
1    RENAULT CLIO MTV

そして、行を取得し、次のように単語ごとに 1 行を作成するクエリを作成する必要があります。

表ではKeywordSearches

Id: (Identity Increment)
Name: RENAULT
Keyword_Id: 1

Id: (Identity Increment)
Name: CLIO
Keyword_Id: 1

Id: (Identity Increment)
Name: MTV
Keyword_Id: 1

テーブル Keywords のすべての行に基づいて、関連するすべてのキーワード検索を作成できる必要があります。

ありがとう。

4

1 に答える 1

4

キーワードのリストを取得する 1 つの方法は、再帰 CTE を使用することです。

with keywords as (
      select 1 as id, 'RENAULT CLIO MTV' as keywords union all
      select 2 as id, 'A B' as keywords
     ),
     cte as (
      select id,
             (case when keywords like '% %'
                   then left(keywords, charindex(' ', keywords))
                   else keywords
              end) as keyword,
             (case when keywords like '% %'
                   then substring(keywords, charindex(' ', keywords)+1, 1000)
                   else ''
              end) as rest
      from keywords
      union all
      select id,
             (case when rest like '% %'
                   then left(rest, charindex(' ', rest))
                   else rest
              end) as keyword,
             (case when rest like '% %'
                   then substring(rest, charindex(' ', rest)+1, 1000)
                   else ''
              end) as rest
      from cte
      where len(rest) > 0
     )
select id, keyword
from cte;

select同じ構造を使用して、ファイナルを次のように置き換えることができますinsert

insert into KeywordSearches(name, keyword_id)
    select keyword, id
    from CTE;

idこれは、ID 列としてを設定したことを前提としています。

最初のクエリのSQLFiddleを次に示します。

編集:

最終的なクエリは次のようになると思います。

with cte as (
      select id,
             (case when keywords like '% %'
                   then left(keywords, charindex(' ', keywords))
                   else keywords
              end) as keyword,
             (case when keywords like '% %'
                   then substring(keywords, charindex(' ', keywords)+1, 1000)
                   else ''
              end) as rest
      from keywords
      union all
      select id,
             (case when rest like '% %'
                   then left(rest, charindex(' ', rest))
                   else rest
              end) as keyword,
             (case when rest like '% %'
                   then substring(rest, charindex(' ', rest)+1, 1000)
                   else ''
              end) as rest
      from cte
      where len(rest) > 0
     )
insert into KeywordSearches(name, keyword_id)
    select keyword, id
    from CTE;
于 2013-07-13T21:03:36.843 に答える