左外部连接返回两个表中的结果
连接返回值,但在两个表中都找到值。我的语法不好?左外部连接返回两个表中的结果
select distinct source.[Manufacturer]
from Products2.dbo.sourceexport source
left join Products2.dbo.uniqueprods u
on source.[Manufacturer]=u.mfg
where u.mfg is null;
select [Manufacturer] from Products2.dbo.sourceexport where [Manufacturer]='XYZ';
select mfg from Products2.dbo.uniqueprods where mfg='XYZ'
选择/加入语句返回约20行,第一行是“XYZ”,但它也可能是格式“XYZ”的一些行。当我将结果(有/无填充,有或没有ltrim(rtrim(u.mfg))
在我的所有领域)复制到第二和第三个语句时,我分别获得了15和260个结果。
左外部连接的任何结果应该为右表返回0行,并且260比我期望的0多。
编辑:我在前面的问题中被告知我太冗长了。显然在这里,我不够冗长。谢谢。 我想要一个左外连接。这意味着,我需要source
中的制造商不在u
中。我们可以返回所有行的所有字段,如果这有助于您更好地回答问题,那么我可以创建第二步,从这些结果中选择不同的制造商。
我有几百万条记录,包含我的客户认为敏感的信息。向这些小部件制造商的行业暗示是不合适的。除了我的客户,其他任何人都不感兴趣。 (a,c,e,g,g,i,k,l)的表格u
表格u
。我想返回值(b,d,f,h,j)。我得到的返回值中有一个但不是c。我不知道它是否包含(b,d,f,h,j)的全部内容,因为我不相信我的陈述有效。
以不同的方式说明问题:我如何编写左外连接,而语句的结果都不在右表中?
编辑2:从下面的语句看来,语法不错。使我的第一个编辑问题重述无效。回到最初的问题陈述,为什么我的左外连接返回两个表中的值?
除了不可见字符(这应该由ltrim(rtim())解决,对吗?)和字段类型,还有哪些其他因素可能导致连接出现故障?
我怀疑你的第二和第三个sql语句不是你认为的那样,你需要使用一个In子句来包装你的初始查询。 DECLARE @ T1作为表(制造商的varchar(1)) DECLARE @ T2作为表(MFG VARCHAR(1))
insert into @t1 values ('a'),('b'),('c'),('d'),('f'),('h'),('j'),('l')
insert into @t2 values ('a'),('c'),('c'),('g'),('g'),('i'),('k'),('l')
/*query 1*/
select *
from @t1
where manufacturer in(
select distinct source.[Manufacturer]
from @t1 source
left join @t2 u
on source.[Manufacturer]=u.mfg
where u.mfg is null
)
/*Query 2*/
select *
from @t2
where mfg in(
select distinct source.[Manufacturer]
from @t1 source
left join @t2 u
on source.[Manufacturer]=u.mfg
where u.mfg is null
)
查询1现在返回从@ t1和查询2不返回任何值的所有值。
添加样品表数据,当前结果和预期结果! – jarlh
虽然你的问题不是很清楚,那么你想要sourceexport中存在的行,但不是唯一的产品?此外,在连接查询中有独特的子句,但不在第二个和第三个where语句中。这可能会给出不同的行数。如@jarlh所述,请添加更多信息。 –
@AkankshaSingh谢谢。这是我的第一个SQL问题。例如,VBA要求信息少得多,而且我正在为那些听众习惯写作。是的,有一个明确的条款。行数并不相关,但是有一件事:我包含行数的唯一原因是,因为第一条语句的任何结果,我认为应该为第三条语句返回0行。除0之外的任何内容都是不可取的。我可能应该只是说行数不是零。 – CWilson