簡體   English   中英

模式更新搜索SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM