Mysql 子查询联接失败

Mysql 子查询联接失败,mysql,sql,teradata,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行用于其他员工,在target中我没有任何重复记录。 我需要在源和目标中出现不同

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

假设输入源为

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行用于其他员工,在target中我没有任何重复记录。 我需要在源和目标中出现不同情况的员工 例如,在上述样本数据中,我在震源中有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

请提供帮助。

为什么不在两个表中按姓名分组时获取行数不同的员工?我想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)

如果您指定得到的确切错误,这将非常有用

如果这是您实际的查询,那么有两件事:第二个派生表btw没有别名,您根本不需要它,至少在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为空

请仅在示例表的相关列中添加完整的表定义。为什么期望的输出是Jack,3?我不明白你的问题。