2015-09-17 42 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; 
相關問題