我需要在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