我需要在SQL Server 2008中算在多個表中的行我這樣做:計數行與TSQL
select count(*) from (select * from tbl1 union all select * from tbl2)
但它給我的語法不正確的錯誤附近)。爲什麼?
PS。表的實際數量可能超過2
我需要在SQL Server 2008中算在多個表中的行我這樣做:計數行與TSQL
select count(*) from (select * from tbl1 union all select * from tbl2)
但它給我的語法不正確的錯誤附近)。爲什麼?
PS。表的實際數量可能超過2
如果你對你的表列數不同的嘗試這種方式
SELECT count(*)
FROM (
SELECT NULL as columnName
FROM tbl1
UNION ALL
SELECT NULL
FROM tbl2
) T
試試這個:
你必須提供一個名稱派生表
select count(*) from
(select * from tbl1 union all select * from tbl2)a
我認爲你必須別名SELECT
在FROM
條款:
select count(*)
from
(
select * from tbl1
union all
select * from tbl2
) AS SUB
你還需要確保*
兩個表中tbl1
和tbl2
返回完全相同的列數,並且它們的類型必須匹配。
哈,愚蠢的我。謝謝! – c00000fd
我不喜歡做的計數之前做工會。它使SQL優化器有機會選擇做更多的工作。
AlexK的(刪除的)解決方案很好。你也可以這樣做:
select (select count(*) from tbl1) + (select count(*) from tbl2) as cnt
哈,我沒有想到這個簡單的問題。僅僅因爲好奇心,你在第二次SELECT之後放了「as cnt」,是不是意圖?或者,我需要那裏的父母嗎? – c00000fd
也因爲你提出了效率,兩個問題。 1.是否有助於用hgulyan建議的「NULL as columnName」替換「count(*)」。 2.是否有可用於tSQL效率/速度優化的資源/文檔? – c00000fd
如果你想有效地做到這一點,那麼不要掃描表。 。 。 。 http://stackoverflow.com/questions/5199412/number-of-rows-sql-server。我的理解是,SQL Server將使用count(*)的索引(如果可用),所以執行性能應該與count(1)相同。 –
好點。謝謝。你能解釋一下,「NULL a」代表什麼? – c00000fd
如果您只需要對行進行計數,那麼從表中選擇什麼並不重要,這就是爲什麼它可以只是「NULL」值,並且是該列的別名。爲了使它更清晰,我寫了'NULL'作爲' – hgulyan
哦,所以我可以在技術上刪除「作爲」,只是「從tbl1選擇NULL」,對吧? – c00000fd