mysql - 如何获取两个独立表之间的数据差异(数据) - 使用sql

标签 mysql sql database

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/

相关文章:

mysql - mysql workbench外键样式的区别

java - Hibernate:错误无法在 JNDI 中找到 SessionFactory

mysql - 优化 MySQL 查询

Mysql子查询问题

mysql - 将查询结果中的 id 外键替换为用户名

mysql - 为什么 'WHERE NOT' 与 NULL 行不起作用?

mysql - 获取查询的列顺序

java - SQLite 从 Java 执行 .import cmd

sql - 如何根据条件复制sql中的数据

database - pgsql2shp postgresql 错误