SQL Server中合并两表去重并将结果赋值给变量的实现
合并两表数据并去重的SQL实现问题
需求说明
- Table1仅含
value列,数据:er3, 5ty, 5y6, 72j, 98e, sf1, 3mn, 9w2 - Table2仅含
value列,数据:r5k, ad8, 5ty, sf1, 34x - 预期结果:合并后无重复记录,保留Table1所有数据,仅加入Table2中未在Table1出现的记录,最终结果为:er3, 5ty, 5y6, 72j, 98e, sf1, 3mn, 9w2, r5k, ad8, 34x
错误尝试1:JOIN语句未达预期
最初尝试用JOIN查询,仅返回两表交集数据,无法满足需求:
SELECT value FROM Table1 T1 JOIN Table2 T2 ON T2.value = T1.value WHERE T2.value IS NOT NULL
错误尝试2:UNION直接赋值变量报错
使用UNION可实现合并去重,但直接将结果赋值给变量@UpdatedValues时触发错误:
SELECT @UpdatedValues = SELECT value FROM Table1 UNION SELECT value FROM Table2
错误提示:Variable assignment is not allowed in a statement containing a top level UNION, INTERSECT or EXCEPT operator
最终解决方案
参考MartinSmith的建议,通过子查询结合STRING_AGG函数,将合并去重后的结果拼接为字符串并赋值给变量:
SELECT @UpdatedValues = STRING_AGG(d.value, ',') WITHIN GROUP(ORDER BY value) FROM (SELECT value FROM Table1 UNION SELECT value FROM Table2) d
内容的提问来源于stack exchange,提问作者Earth
相关产品推荐
相关产品推荐

