2015-09-17 40 views
1

比较到另一个表这是我dbtest1结构SQL显示两个表的差异,并将结果与​​不同的数据库

数据库名称: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 

使用此查询b elow得到两张表的区别。

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?我不知道如何实现提前this..thanks。


数据库名称:dbtest2

tbl3

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

假设用户具有相同的权限,然后它只是一个UNION。将数据库引用添加到表名称,例如'dbtest2.tbl3' – Strawberry

回答

1

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

DATABASE_NAME.TABLE_NAME.COLUMN_NAME 

如果每个.分离标识符的是他们的名字空间的名字。当你发出一个在当前命名空间中的查询时,你可以省略命名空间的名字,就像你在dbtest2时所说的desc tbl3

这里是你会怎么做它在您的查询:

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; 
相关问题