我有6個mysql數據庫與users_table使用字段email_address相同的表名,現在我想從任何一個數據庫表中缺少的所有6個數據庫中獲得email_address。從6個不同的mysql數據庫同步用戶表數據
請給我一些相同的建議。
我有6個mysql數據庫與users_table使用字段email_address相同的表名,現在我想從任何一個數據庫表中缺少的所有6個數據庫中獲得email_address。從6個不同的mysql數據庫同步用戶表數據
請給我一些相同的建議。
這一個選擇一個數據庫中缺少的所有電子郵件,並指出它們存在於哪個數據庫中。
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
)
謝謝,它和我想要的一樣,你是男人,再次感謝。 – vipinbairagi
@vipinbairagi不客氣。在這裏說謝謝的常用方法是通過點擊左側的答案來接受答案:) – fancyPants
嗨,有沒有什麼辦法來優化這個查詢?因爲每個數據庫表中有2K條記錄時,執行時間過長。 – vipinbairagi
證明是有任何人與解決方案相同? – vipinbairagi