T1 和 T2 中的数据存在于多个日期的多行中,我编写了这些 sql 以获取以下数据集。
表 T1 是以下 sql 的结果:
select SYS_ID, SYS_NM
FROM T1
WHERE dt = '30-NOV-2015'
group by SYS_ID, SYS_NM
order by 1,2;
T1
SYS_ID SYS_NM
4 MPC
4 MHL
6 FR
8 BECD
8 BCD
8 CL
8 FHLB
8 JRD
表T2是下面sql的结果
Select SYS_ID, SYS_NM FROM T2
WHERE dt = '30-NOV-2015'
and SYS_CD IN ('R103')
group by SYS_ID, SYS_NM
order by 1,2;
T2
SYS_ID SYS_NM
8 BECD
8 BCD
8 FHLB
现在我需要从 T1
获取 T2
中不存在的数据。
我尝试了两种方法,但没有得到预期的结果。
Method 1:
select A.SYS_ID, A.SYS_NM
FROM T1 A
WHERE not exists
(
select B.SYS_ID, B.SYS_NM
FROM T2 B
WHERE A.SYS_ID = B.SYS_ID
and A.SYS_NM = B.SYS_NM
group by 1, 2
)
group by 1,2
order by 1,2;
方法二:
Select A.SYS_ID, A.SYS_NM FROM T1 A
LEFT JOIN T2 B
ON A.SYS_ID = B.SYS_ID
group by A.SYS_ID, A.SYS_NM
order by 1,2;
最佳答案
你很接近。试试这个:
SELECT * FROM T1
WHERE NOT EXISTS
(SELECT * FROM T2
WHERE T2.SYS_ID = T1.SYS_ID
AND T2.SYS_NM = T1.SYS_NM)
order by 1, 2;
更新: 我猜您在结果中看到了重复的行。如果是这样,添加“DISTINCT”将纠正它。
我还注意到我之前推荐的答案在 JOIN 子句中没有两列。这是完整的解决方案:
SELECT DISTINCT A.SYS_ID, A.SYS_NM
FROM T1 A
LEFT JOIN T2 B ON A.SYS_ID = B.SYS_ID AND A.SYS_NM=B.SYS_NM
WHERE B.SYS_ID IS NULL
GROUP BY A.SYS_ID, A.SYS_NM;
关于mysql - 如何获取两个独立表之间的数据差异(数据) - 使用sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34645214/