SubQuery加入失败

时间:2014-05-22 14:30:40

标签: mysql sql teradata

我试图找出目标中缺失的记录。我需要缺少记录的员工。

假设我输入源为

1,Jack,type1,add1,reg3,..,..,..,
2,Jack,type2,add1,reg3,..,,.,..,
3,Jack,type3,add2,reg4,..,.,..,.,
4,Rock,,,,,,,,

我的输出为

1,Jack,type1,add1,reg3,..,..,..,
4,Rock,,,,,,,,

我有其他员工的1000行数,目标中我没有任何重复记录。 我需要出现在源和目标中的员工有不同的发生 例如,在上面的样本数据中,我有3个杰克条目和1个岩石源条目

并且在目标中我只有杰克和一个摇滚的进入

我在查询下运行,所需的输出是Jack,3

我怎样才能得到它。我在下面的查询中收到错误

select A.EMP_NUMBER,A.CNT1
from

(select EMP_NUMBER,count(EMP_NUMBER) as CNT1
 from EMPLOYEE_SOURCE
 group by EMP_NUMBER ) as A

INNER JOIN 

 (select B.EMP_NUMBER,B.CNT2
  from (select EMP_NUMBER,count(EMP_NUMBER) as CNT2  
        from EMPLOYEE_TARGET 
        group by EMP_NUMBER )as B )

 ON (A.EMP_NUMBER = B.EMP_NUMBER)

 where A.CNT1 != B.CNT2

请帮忙。

2 个答案:

答案 0 :(得分:0)

为什么在按名称分组时,不要让两个表中具有不同行数的员工(我想Emp_Number是包含名称的字段,如果问题中的查询返回的话)

SELECT s.Emp_Number, Count(s.Emp_Number)
FROM   EMPLOYEE_SOURCE s
       LEFT JOIN EMPLOYEE_TARGET t ON s.Emp_Number = t.Emp_Number
GROUP BY s.Emp_Number
HAVING Count(s.Emp_Number) != Count(t.Emp_Number)

答案 1 :(得分:0)

如果您指定了确切的错误,那将非常有用。

如果这是您的实际查询,则有两件事:第二个派生表没有别名(顺便说一下,根本不需要它),至少在Teradata中!=无效,这个是SQL而不是C.

select A.EMP_NUMBER,A.CNT1
from  
 (
  select EMP_NUMBER,count(EMP_NUMBER) as CNT1
  from EMPLOYEE_SOURCE
  group by EMP_NUMBER
 ) as A    
INNER JOIN 
 (
   select EMP_NUMBER,count(EMP_NUMBER) as CNT2  
   from EMPLOYEE_TARGET 
   group by EMP_NUMBER
 ) as B
ON (A.EMP_NUMBER = B.EMP_NUMBER)
where A.CNT1 <> B.CNT2

如果第二个表中缺少员工,则可能必须使用外部联接作为Serpiton建议并添加额外的WHERE条件:     其中A.CNT1&lt; CNT1&gt; B.CNT2        或b.CNT2 IS NULL