2011-11-09 30 views
2

我是從多個表瀏覽的解決方案,以獲得計數和我遇到了以下的答案來了爲超過2張桌子工作。我目前的代碼如下:COUNT(*)多表

SELECT COUNT(*), 
(SELECT COUNT(*) FROM TABLE1), 
(SELECT COUNT(*) FROM TABLE2), 
(SELECT COUNT(*) FROM TABLE3), 
(SELECT COUNT(*) FROM TABLE4), 
(SELECT COUNT(*) FROM TABLE5), 
(SELECT COUNT(*) FROM TABLE6), 
(SELECT COUNT(*) FROM TABLE7), 
(SELECT COUNT(*) FROM TABLE8), 
(SELECT COUNT(*) FROM TABLE9), 
(SELECT COUNT(*) FROM TABLE10), 
(SELECT COUNT(*) FROM TABLE11), 
(SELECT COUNT(*) FROM TABLE12), 
(SELECT COUNT(*) FROM TABLE13), 
(SELECT COUNT(*) FROM TABLE14), 
(SELECT COUNT(*) FROM TABLE15), 
(SELECT COUNT(*) FROM TABLE16), 
(SELECT COUNT(*) FROM TABLE17), 
(SELECT COUNT(*) FROM TABLE18) 
FROM TABLE19 

但是,它只計算TABLE1和TABLE19。我需要統計所有表(表1-18)以及TABLE19(希望使用類似於第一個示例的結構)。

+2

你使用什麼數據庫和版本? –

+2

我認爲你在這裏解決了錯誤的問題。爲什麼你需要做這個查詢? –

+0

必須有更高效的方式來完成這項任務。我會+1 @MarkByers問題。 –

回答

2

取決於哪個數據庫,這是它可能會略有不同...

對於Oracle這樣做:

Select (select count(*) from table1) as table1Count, 
     (select count(*) from table2) as table2Count 
from dual 

如果是SQL Server,那麼就把它從雙重處理掉。

編輯:

既然你提到你在評論中使用MySQL:

Get record counts for all tables in MySQL database

+1

使用鏈接中的解決方案。 – Matt

+0

+1爲MySQL解決方案提供了更高效的方法。 –

2

使用別名,以便列具有唯一的名稱:

SELECT 
    (SELECT COUNT(*) FROM TABLE1) AS count_table1, 
    (SELECT COUNT(*) FROM TABLE2) AS count_table2, 
    (SELECT COUNT(*) FROM TABLE3) AS count_table3, 
    etc.. 
    (SELECT COUNT(*) FROM TABLE19) AS count_table19 
+0

+1,我懷疑問題是檢索計數。 –

0

如果你很高興接受行,不列結果,你可以隨時使用UNION :

SELECT "table1", COUNT(*) FROM table1 UNION       
SELECT "table2", COUNT(*) FROM table2 UNION       
SELECT "table3", COUNT(*) FROM table3 

0

在MySQL上這個工作:

select sum(total) from(
select count(*) as total from Table1 
union 
select count(*) as total from Table2) as a;