SQL显示两个表的差异,并将结果与​​另一个具有不同数据库的表进行比较

时间:2015-09-17 07:51:46

标签: mysql sql

这是我的dbtest1结构

数据库名称:dbtest1

tbl1

id | name  | age
1  | johny | 26
2  | jane  | 25
3  | mike  | 32
4  | jean  | 33

tbl2

id | name | age
1  | john | 26
2  | jane | 25
3  | mike | 42

使用下面的查询来获取两个表的区别。

SELECT *
FROM (
SELECT *, 'tableT1' AS fromTable FROM tbl1
UNION ALL
SELECT *, 'tableT2' AS fromTable FROM tbl2
) tbl
GROUP BY id, name, age
HAVING count(*) = 1
ORDER BY id;

我得到了这个结果。

id | name | age | fromTable
1  | john | 26  | tableT1
3  | mike | 42  | tableT2
4  | jean | 33  | tableT1

现在我的问题是如何才能将上述结果与dbtest2进行比较?我不知道如何实现这一点......提前谢谢。

数据库名称:dbtest2

tbl3

id | name | age
1  | john | 26
2  | jane | 25
3  | mike | 42

1 个答案:

答案 0 :(得分:1)

您可以使用完全限定名称。它们通常具有以下语法:

DATABASE_NAME.TABLE_NAME.COLUMN_NAME

其中用.分隔的每个标识符都是其名称空间的名称。当您发出当前命名空间中的查询时,可以省略命名空间的名称,就像您在desc tbl3时所说的dbtest2一样。

以下是在查询中执行此操作的方法:

 SELECT *
 FROM (
     SELECT *, 'tableT1' AS fromTable FROM tbl1
     UNION ALL
     SELECT *, 'tableT2' AS fromTable FROM tbl2
     UNION ALL
     SELECT *, 'tableT3' AS fromTable FROM dbtest2.tbl3 # Here use fully qualified table name
 ) tbl
 GROUP BY id, name, age
 HAVING count(*) = 1
 ORDER BY id;