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?我不明白你的问题。