20 (またはそれ以上) の単語 (文字列) のリストがあり、これらの単語が 3 つの列に含まれる行を選択したいと考えています。like
SQLの式を使用する必要があります。しかし、like 式で複数の文字列を使用する方法がわかりません。(私はunion
今それをやっていますが、少なくとも 60 の select ステートメントがあり、パフォーマンスが低下したと思います。それは本当にパフォーマンスを低下させますか?)
//get the advertise that have similar keywords
foreach (string str in keywords)
{
if (str != "")
{
if (!string.IsNullOrEmpty(sqlQuery)) sqlQuery += " union";
sqlQuery = "select * from AD_Advertise where (AdKeyWords like N'%" + str + "%'"
+ " OR AdTitle like N'%" + str + "%' "
+ " OR AdDescription like N'%" + str + "%' "
+ " OR AdGroupItemCode=" + adinfo.AdGroupItemCode + ")"
+ " AND AdSiteID=" + CMSContext.CurrentSiteID
+ " AND AdShow='True' "
+ " AND ItemID != " + ADId;
}
}
ds = cn.ExecuteQuery(sqlQuery,null);//("AD.Advertise.selectall", null, where, "ItemModifiedWhen");
答え:
最後に、以下のコードを使用しました:
if object_id('tempdb..#WordList') is not null
drop table #WordList
CREATE TABLE #WordList ( KeyWord nvarchar(100))
insert into #WordList values (N'حقوقی'),(N'وکیل');
SELECT DISTINCT *
FROM AD_ADvertise a
LEFT JOIN #WordList k
ON a.AdKeywords LIKE '%' + k.KeyWord + '%'
OR a.AdTitle LIKE '%' + k.KeyWord + '%'
OR a.AdDescription LIKE '%' + k.KeyWord + '%'
WHERE
(k.KeyWord IS NOT NULL OR a.AdGroupItemCode = @AdGroupItemCode)
AND a.AdSiteId = @AdSiteId
AND a.AdShow = 'True'
AND a.ItemId != @ItemId
;drop table #WordList