如何在 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

提问人:Earth 提问时间:8/27/2023 最后编辑:Earth 更新时间:8/28/2023 访问量:96

问:

我有 2 张桌子,而且 .两个表都只有 1 列。Table1Table2value

  • 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是输入参数值,需要检查值,如果存在,则在连接时不得包含该值,因为我们已经在 中拥有该值。Table1Table 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
sql-server 联接 选择 sql-server-2012

评论

0赞 Amira Bedhiafi 8/27/2023
在 2 个表之间使用 Union
0赞 Bob Tway 8/27/2023
尝试在查询中选择 distinct 来代替 select。此外,如果表中没有 null 值,则不需要 where 子句。
0赞 Martin Smith 8/27/2023
你想用这个任务做什么? 返回一个表。因此,您不能明智地将其分配给标量变量。您可以将其插入到表变量中。或者进行一些聚合以返回单个值,然后将其分配给标量变量@UpdatedValuesSELECT value FROM Table1 UNION SELECT value FROM Table2
0赞 Earth 8/27/2023
@MartinSmith,感谢您的评论。实际上我正在做.最后,聚合变量中的逗号分隔值。谢谢SELECT @UpdatedValues = STRING_AGG(value, ',') WITHIN GROUP(ORDER BY value) FROM Table1 UNION SELECT value FROM Table2
0赞 Martin Smith 8/27/2023
您可以将其放入派生表中SELECT @UpdatedValues = STRING_AGG(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 或者列数匹配,但类型不匹配。