2014-05-22 93 views
0

我正试图找出目标中缺少的记录。我需要那些失踪记录的员工。子查询加入失败

假设我有输入源为

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

,我有输出

​​

我有1000个号行其他员工和目标我没有任何重复的记录。 我需要谁是存在于源和目标具有不同次数 装置,用于例如在上述采样数据的雇员我有千斤顶的3项,在源1个条目岩

和目标I只对杰克的条目一个用于岩石

我运行下面的查询和要求输出插孔,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 

请帮忙。

+0

请添加示例表tabl的完整表定义(仅限相关列) ES。请问为什么所需的输出是'Jack,3'?我不明白你的问题。 – VMai

回答

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) 
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 <> B.CNT2 或b.CNT2 IS NULL