[英]Pattern Update Search Sql
這讓我感到困惑,我需要:
UPDATE items
SET items.Categories = category.Categories --fyi this is pk
WHERE items.Description is like pattern from category.Description
我嘗試了各種方法來做到這一點。 也許我看錯了一切。 但是,我正在把這車輪轉動。
我發現這可行:
UPDATE ITEMS
SET categories = C.Categories
FROM ITEMS I, CATEGORY C
WHERE I.description LIKE '%' + substring(C.description,1,6) + '%';
產生(受影響的933行),並且c.category中的每個值至少出現一次或多次。
有沒有辦法使它更有效?
UPDATE
將是這樣的
UPDATE ITEMS
set categories = C.Categories
FROM ITEMS I
JOIN CATEGORY C
ON I.description LIKE '%' + C.description + '%' ;
假設您具有這樣的數據集,則XYZ將在ITEM表中更新為APPLE
INSERT INTO ITEMS
VALUES ('XYZ','APPLE is good and healthy');
INSERT INTO CATEGORY
VALUES ('APPLE','APPLE is good');
運行更新時,您還必須確保UPDATE語句不會由於表的“描述”字段之間存在一對多的關系而產生重復項。 為此,您可以檢查是否存在一對多關系,也可以完全刪除主鍵。
請找到下面的代碼,該代碼檢查一對多關系,然后運行更新:
IF NOT EXISTS (SELECT A.Categories, COUNT(1)
FROM items A
INNER JOIN Category B
ON A.Description LIKE '%' + B.Description + '%'
GROUP BY A.Categories
HAVING COUNT(1) > 1
)
UPDATE ITEMS
set categories = C.Categories
FROM ITEMS I
INNER JOIN CATEGORY C
ON I.description LIKE '%' + C.description + '%' ;
也可以在此處找到有關SQL Fiddle的解決方案: http ://sqlfiddle.com/#!6/80e2e/12
這是你想要的嗎?
UPDATE items
SET Categories = c.Categories --fyi this is pk
FROM items i JOIN
Category c
ON i.Description like '%' + category.Description + '%';
注意:表之間的比較使用通配符匹配,這將很慢。 盡管全文本索引可能會有所幫助,但是您無法使用普通索引來改善此特定比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.