You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Full Outer Join未返回结果,单独查询Employees2却正常?

问题原因分析

你的FULL OUTER JOIN查询返回空结果,核心问题出在WHERE子句的过滤逻辑:

当执行FULL OUTER JOIN时,理论上会保留两个表中所有匹配和不匹配的行,但你的WHERE a.username = @testuser条件会过滤掉所有Employees1中没有匹配(即a.username为NULL)的行。而测试用户sname并不存在于Employees1的username字段中,所以即使JOIN找到了Employees2中符合条件的记录,也会被这个WHERE条件直接过滤掉。

而第二个单独查询Employees2的语句没有额外的过滤条件,自然能返回正确结果。

解决方法

你可以通过以下两种方式修正查询:

方式1:将Employees1的匹配条件移到JOIN的ON子句中

这样能保留FULL OUTER JOIN的特性,同时匹配两个表的目标用户:

DECLARE @testuser VARCHAR(100)
SET @testuser = 'sname'

SELECT ISNULL(a.full_name, b.full_name) AS full_name
FROM Employees1 AS a
FULL OUTER JOIN Employees2 AS b 
  ON a.username = @testuser 
  OR b.email LIKE @testuser + '%'
WHERE a.username IS NOT NULL OR b.email IS NOT NULL

方式2:使用UNION ALL合并两个表的查询结果

这种方式更直接,因为你本来就是要从两个表中分别查找目标用户:

DECLARE @testuser VARCHAR(100)
SET @testuser = 'sname'

SELECT full_name FROM Employees1 WHERE username = @testuser
UNION ALL
SELECT full_name FROM Employees2 WHERE email LIKE @testuser + '%'

方式2的效率通常更高,因为它不需要执行JOIN操作,而是分别查询两个表后合并结果。

内容的提问来源于stack exchange,提问作者Joe Defill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:06:29