2013-06-25 40 views

回答

0

這一個選擇一個數據庫中缺少的所有電子郵件,並指出它們存在於哪個數據庫中。

SELECT email, GROUP_CONCAT(db_Name) AS emailIsOnlyIn FROM (
    SELECT 'db1' as db_Name, email FROM db1.yourTable 
    UNION ALL 
    SELECT 'db2' as db_Name, email FROM db2.yourTable 
    UNION ALL 
    SELECT 'db3' as db_Name, email FROM db3.yourTable 
    UNION ALL 
    SELECT 'db4' as db_Name, email FROM db4.yourTable 
    UNION ALL 
    SELECT 'db5' as db_Name, email FROM db5.yourTable 
    UNION ALL 
    SELECT 'db6' as db_Name, email FROM db6.yourTable 
) subquery_alias 
GROUP BY email 
HAVING COUNT(DISTINCT db_name) < 6; 

如果你想知道在哪個數據庫中的郵件丟失這是一個比較複雜一點:

SELECT 
* 
FROM (
    SELECT email FROM db1.yourTable 
    UNION 
    SELECT email FROM db2.yourTable 
    UNION 
    SELECT email FROM db3.yourTable 
    UNION 
    SELECT email FROM db4.yourTable 
    UNION 
    SELECT email FROM db5.yourTable 
    UNION 
    SELECT email FROM db6.yourTable 
) sq, 
    ( SELECT 'db1' as db_Name2 
     UNION ALL 
     SELECT 'db2' as db_Name2 
     UNION ALL 
     SELECT 'db3' as db_Name2 
     UNION ALL 
     SELECT 'db4' as db_Name2 
     UNION ALL 
     SELECT 'db5' as db_Name2 
     UNION ALL 
     SELECT 'db6' as db_Name2 
    )dummy 
WHERE NOT EXISTS (SELECT 1 FROM (
    SELECT 'db1' as db_Name, email FROM db1.yourTable 
    UNION ALL 
    SELECT 'db2' as db_Name, email FROM db2.yourTable 
    UNION ALL 
    SELECT 'db3' as db_Name, email FROM db3.yourTable 
    UNION ALL 
    SELECT 'db4' as db_Name, email FROM db4.yourTable 
    UNION ALL 
    SELECT 'db5' as db_Name, email FROM db5.yourTable 
    UNION ALL 
    SELECT 'db6' as db_Name, email FROM db6.yourTable 
    ) subquery_alias 
WHERE sq.email = subquery_alias.email AND subquery_alias.db_Name = dummy.db_Name2 
) 
+0

謝謝,它和我想要的一樣,你是男人,再次感謝。 – vipinbairagi

+0

@vipinbairagi不客氣。在這裏說謝謝的常用方法是通過點擊左側的答案來接受答案:) – fancyPants

+0

嗨,有沒有什麼辦法來優化這個查詢?因爲每個數據庫表中有2K條記錄時,執行時間過長。 – vipinbairagi