提问人:Earth 提问时间:8/27/2023 最后编辑:Earth 更新时间:8/28/2023 访问量:96
如何在 SQL Server 中联接 2 个表(表 2 数据,如果表 1 中存在,则不得选择该特定记录)
How to join 2 tables (Table 2 data if present in Table 1, that specific record must not be selected) in SQL Server
问:
我有 2 张桌子,而且 .两个表都只有 1 列。Table1
Table2
value
Table1
-er3, 5ty, 5y6, 72j, 98e, sf1, 3mn, 9w2
Table2
-r5k, ad8, 5ty, sf1, 34x
我们如何查询,以便我们得到下面的结果。
结果:er3, 5ty, 5y6, 72j, 98e, sf1, 3mn, 9w2, r5k, ad8, 34x
我尝试了这段代码:
SELECT value
FROM Table1 T1
JOIN Table2 T2 ON T2.value = T1.value
WHERE T2.value IS NOT NULL
此查询未返回预期结果。
预期结果:er3, 5ty, 5y6, 72j, 98e, sf1, 3mn, 9w2, r5k, ad8, 34x
Table2
是输入参数值,需要检查值,如果存在,则在连接时不得包含该值,因为我们已经在 中拥有该值。Table1
Table 1
提前致谢
编辑 - 我已经采用了 Tim Biegeleisen 的解决方案,它工作正常。当 union 语句被赋值给变量时,如下所示
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
我必须将结果集分配给一个变量。如何实现这一点。提前致谢。
编辑 (2)
根据马丁史密斯的评论,我取得了预期的结果。
我的解决方案的最终 SQL 查询
SELECT @UpdatedValues = STRING_AGG(d.value, ',')
WITHIN GROUP(ORDER BY value)
FROM (SELECT value FROM Table1 UNION SELECT value FROM Table2) d
答:
2赞
Tim Biegeleisen
8/27/2023
#1
您似乎想要两个表的合并:
SELECT [value] FROM Table1
UNION
SELECT [value] FROM Table2;
评论
0赞
Amira Bedhiafi
8/28/2023
Value 是保留的关键字。在括号之间使用它或根本不使用它(遵循命名约定的最佳实践
0赞
Tim Biegeleisen
8/29/2023
@Earth 有什么理由不接受我的回答吗?
0赞
Amira Bedhiafi
8/29/2023
我记得我写了一篇关于这个问题的文章,我每天花一个小时在 SOF 上,有时甚至花更多时间来理解和尝试在我的机器上模拟 OP 问题,它最终让我重影或感谢它在没有验证的情况下工作:linkedin.com/pulse/......
2赞
Rezzen
8/27/2023
#2
试试这个,我认为没有必要加入他们
;WITH test AS(
SELECT value FROM Table1 UNION ALL
SELECT value FROM Table2
)
SELECT DISTINCT value FROM test
评论
1赞
Jonas Metzler
8/27/2023
切勿使用 *,尤其是在使用 .由于列数不匹配,您收到错误消息的风险很高。UNION
0赞
Tim Biegeleisen
8/29/2023
@JonasMetzler 或者列数匹配,但类型不匹配。
评论
@UpdatedValues
SELECT value FROM Table1 UNION SELECT value FROM Table2
SELECT @UpdatedValues = STRING_AGG(value, ',') WITHIN GROUP(ORDER BY value) FROM Table1 UNION SELECT value FROM Table2
SELECT @UpdatedValues = STRING_AGG(value, ',') WITHIN GROUP(ORDER BY value) FROM (SELECT value FROM Table1 UNION SELECT value FROM Table2) d