2014-02-24 96 views
0

我有很多具有相同列的表,我需要從所有這些表中提取數據(如COUNT)。從不同的SQL表中選擇數據按表名過濾

我知道我可以創建一個UNION語句,但是我有100個表,並且所有表名都具有相同的格式(example_table_1。example_table_2 ...)。有沒有辦法讓所有的表具有一定的條件(在這種情況下,表名包含「example_table」)?

感謝您的幫助,我是一個新手。

+0

您正在使用什麼數據庫? –

+0

嗨,你是什麼意思?我正在連接到MySQL主機 –

+0

MySQL是數據庫然後。這個問題的答案會因rdbms/database而異。 –

回答

1

具有相同結構的多個表幾乎沒有任何意義,如果可能的話應該修復設計。

您可以使用INFORMATION_SCHEMA獲得計數,或單獨列出表(然後你可以用你的SQL語句Concat的):

SELECT SUM(table_rows) 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '{your_db}' 
    AND table_name LIKE '%example_table%'; 

如果你需要精確的計數,你應該使用CONCAT()建設COUNT()查詢,爲INFORMATION_SCHEMA可能不可靠:

SELECT CONCAT('SELECT "',table_name,'" AS table_name, COUNT(*) AS ct FROM ',table_schema,'.',table_name,' UNION') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '{your_db}' 
    AND table_name LIKE '%example_table%'; 
+0

嗨,感謝您的答案。這個結構很有意義,因爲它是一個龐大的數據庫,否則服務器會崩潰。這種方法說我在每個表中有2行,但這是錯誤的。 (每張表有aprox。1.200.000行) –

+0

@ user1475216查看已更新。 –

+0

感謝您的更新!這個方法給了我一個表,如:table1 = 100,table2 = 105等。我需要這個來總結所有這些數字 –