左外部连接返回两个表中的结果

左外部连接返回两个表中的结果

问题描述:

连接返回值,但在两个表中都找到值。我的语法不好?左外部连接返回两个表中的结果

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())解决,对吗?)和字段类型,还有哪些其他因素可能导致连接出现故障?

+3

添加样品表数据,当前结果和预期结果! – jarlh

+0

虽然你的问题不是很清楚,那么你想要sourceexport中存在的行,但不是唯一的产品?此外,在连接查询中有独特的子句,但不在第二个和第三个where语句中。这可能会给出不同的行数。如@jarlh所述,请添加更多信息。 –

+0

@AkankshaSingh谢谢。这是我的第一个SQL问题。例如,VBA要求信息少得多,而且我正在为那些听众习惯写作。是的,有一个明确的条款。行数并不相关,但是有一件事:我包含行数的唯一原因是,因为第一条语句的任何结果,我认为应该为第三条语句返回0行。除0之外的任何内容都是不可取的。我可能应该只是说行数不是零。 – CWilson

我怀疑你的第二和第三个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不返回任何值的所有值。

+0

谢谢,我怀疑我的第二个和第三个查询只是调试语句,在生产中绝对没有用,我认为这些语句只是用来证明第一个语句没有按预期工作,因为证明很重要在这样的论坛中,我希望只要我的左外部连接正常工作,这些语句就会被删除 – CWilson

+0

并且非常感谢您输入。我相信您期望,query1可以正确地处理上述数据。它会返回问题v线索在我的实时数据。所以显然,错误必须在我的数据中,而不是在我的声明中。 – CWilson