最简单的方法是这样的:
select *,
(select count(*) from tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt
from tbl1 t1
这是一个可行的版本(使用表变量):
declare @tbl1 table
(
tbl1ID int,
prop1 varchar(1),
prop2 varchar(2)
)
declare @tbl2 table
(
tbl2ID int,
tbl1ID int
)
select *,
(select count(*) from @tbl2 t2 where t2.tbl1ID = t1.tbl1ID) as cnt
from @tbl1 t1
显然这只是一个原始示例 - 标准规则适用,例如不选择 * 等...
2008 年 8 月 21 日 21:27 更新:
@AlexCuse-是的,完全同意性能。
我开始使用外连接来编写它,但后来在他的示例输出中看到计数并认为这就是他想要的,如果表是外连接的,计数将不会正确返回。更不用说连接会导致您的记录成倍增加(来自 tbl1 的 1 个条目与 tbl2 中的 2 个条目匹配 = 2 个返回),这可能是无意的。
所以我想这真的归结为你的查询需要返回的细节。
2008 年 8 月 21 日 22:07 更新:
要回答您的问题的其他部分 - VB 函数是要走的路吗?不,绝对不是。不是为了这么简单的事情。
函数的性能很差,返回集中的每一行都执行函数。
如果你想“划分”查询的不同部分,你必须更像一个存储过程来处理它。构建一个临时表,执行部分查询并将结果插入表中,然后执行您需要的任何进一步查询并更新原始临时表(或插入更多临时表)。