SQL获取唯一键匹配但不同表之间其他某些列中的数据不同的数据

时间:2018-11-14 13:06:16

标签: mysql 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

理想情况下,基表应该有所不同。 我已经尝试过Joins and Unions,但是如上所述无法获取数据。

3 个答案:

答案 0 :(得分:2)

  • 由于只需要两个表中具有匹配的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

答案 1 :(得分:0)

我会做的:

SELECT t.*
FROM tablea t
WHERE EXISTS (SELECT 1 FROM tableb t1 WHERE t1.cola = t.cola AND t1.colb <> t.cold);

第二个版本也是如此,只需要滑动表名即可。

答案 2 :(得分:0)

使用EXISTS并全部合并

SELECT t.*
FROM tablea t
WHERE EXISTS (SELECT 1 FROM tableb t1 WHERE t1.cola = t.cola AND t1.colb <> t.colb)
union all    
SELECT t.*
FROM tableb t
WHERE EXISTS (SELECT 1 FROM tablea t1 WHERE t1.cola = t.cola AND t1.colb <> t.colb)