首页 > 解决方案 > SQL 来获取唯一键匹配但数据在不同表之间的某些其他列中不同的数据

问题描述

我有两个结构相同的表,如下所示。我正在尝试编写一个查询来使用作为第一列的唯一键比较两个表,并在第二列中存在不匹配时尝试返回值。如果密钥不存在,则无需考虑该数据。仅当两个表中都存在密钥时,我们才对其进行比较。

Table A  
ColumnA ColumnB  
A         1  
B         2  
C         2  
D         8  

Table B  
ColumnC ColumnD  
A         1  
B         3  
C         5  
F         4  

例如,当比较表 A 和 B 时,上表的输出应该是

B         2
C         2

当将表 B 与 A 进行比较时,它应该是

B         3
C         5

理想情况下,应该会出现基表的差异。我已经尝试过加入和联合,但我无法获取上述数据。

标签: mysqlsql

解决方案


  • 由于您只需要在两个表中具有匹配 FK 值的那些行,我们只需要使用INNER JOIN.
  • 现在,我们可以通过使用简单地考虑不匹配的行WHERE .. <> ..

比较表 A 和表 B 时,我们只能得到表 A 行:

SELECT
 tA.* 
FROM tableA AS tA
JOIN tableB AS tB 
  ON tB.ColumnC = tA.ColumnA
WHERE tB.ColumnD <> tA.ColumnB

将表 B 与表 A 进行比较时,只需从表 B 中获取行:

SELECT
 tB.* 
FROM tableA AS tA
JOIN tableB AS tB 
  ON tB.ColumnC = tA.ColumnA
WHERE tB.ColumnD <> tA.ColumnB

推荐阅读