我有一些数据,以这种方式映射(用逗号分隔)
Name Items
Andrew apples, bananas, oranges
Jane bananas, apples
Mary oranges, apples
我想比较每个名字的果实,以便:
当用户输入两个名称时,我可以确定Andrew的水果和Jane的水果有什么区别。这可以显示在列出两个组都不存在的水果的字段中,并显示拥有该(不同)水果的用户。
我该怎么做?
答案 0 :(得分:0)
MS Sql Server(+2017)的解决方案。 它确实使用STRING_SPLIT来拆分字符串。
然后使用EXCEPT
删除相交的项目。
导致只有名字具有的项。
DECLARE @Name1 NVARCHAR(30);
DECLARE @Name2 NVARCHAR(30);
SET @Name1 = 'Mary';
SET @Name2 = 'Jane';
SELECT DISTINCT LTRIM(spl.value) AS Item
FROM TestTable t
CROSS APPLY STRING_SPLIT(t.Items, ',') spl
WHERE Name = @Name1
EXCEPT
SELECT DISTINCT LTRIM(spl.value) AS Item
FROM TestTable t
CROSS APPLY STRING_SPLIT(t.Items, ',') spl
WHERE Name = @Name2
ORDER BY Item;
使用此示例数据时:
CREATE TABLE TestTable
(
Name NVARCHAR(30) PRIMARY KEY,
Items NVARCHAR(300) NOT NULL
);
INSERT INTO TestTable (Name, Items) VALUES
('Andrew', 'apples, bananas, oranges'),
('Jane', 'bananas, apples'),
('Mary', 'oranges, apples');
它返回:
Item
--------------
oranges