这让我感到困惑,我需要:
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.Categories中的每个值至少显示一次或多次。
有没有办法让这更有效?
答案 0 :(得分:1)
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');
答案 1 :(得分:1)
在运行更新时,您还必须确保UPDATE语句不会因表的“description”字段之间的一对多关系而产生重复。为此,您可以检查一对多关系是否存在,或者完全删除主键。
请在下面找到检查一对多关系的代码,然后运行更新:
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
答案 2 :(得分:0)
这是你想要的吗?
UPDATE items
SET Categories = c.Categories --fyi this is pk
FROM items i JOIN
Category c
ON i.Description like '%' + category.Description + '%';
作为注释:表之间的比较是使用通配符匹配,这将是缓慢的。虽然全文索引可能会有所帮助,但您无法使用普通索引改进此特定比较。