可以说我有桌子:
帐户:id、id2、id3、custId、option1、option2、类型
并且同一张表有所有帐户,其中一些是“父”帐户(可以是没有孩子的“独奏”帐户)和一些是“儿童”帐户(我知道设计不好,但这就是我正在使用的)。
每个帐户的不同/复合键是id + id2 + id3 + option1 + option2 + custId
.
我想用特定的custId
and查询“父母”或“独奏”帐户的列表type
,这很容易通过以下方式完成:
Select *
From accounts
Where custId = 1 And type = 'foo'
and (option1 = 'solo' Or option2 = 0)
where'solo'
意味着它是一个单独的帐户并且没有孩子,这意味着它是一系列帐户0
中的第一个,因此是它的父帐户。
然后我想获得与通过上述查询的结果集获得的每个父母相关联的“孩子”的数量。显然,“单独”帐户不会有孩子。
例如,从特定的“父”帐户获取“子”计数类似于(假设我正在寻找 id=1、id2=1、id3=1 的帐户的子级:
Select Count(*)
From accounts
Where id = 1 And id2 = 1 And id3 = 1 And custId = 1
And option1 != 'solo' And option2 != 0)
那么,如何将这两个查询结合起来,以获得第一个查询的结果集及其每一行的计数?
例子
填充我们可以拥有的表格:
id id2 id3 custId option1 option2 type
------------------------------------------------------------
1 1 1 1 solo 9 foo
2 2 2 1 solo 9 foo
3 4 4 1 NULL 0 foo
3 4 4 1 NULL 1 foo
3 4 4 1 NULL 2 foo
我想要这样的结果集:
id id2 id3 custId option1 option2 type children
-------------------------------------------------------------------------
1 1 1 1 solo 9 foo 0
2 2 2 1 solo 9 foo 0
3 4 4 1 NULL 0 foo 2
基本上我想要这样的东西(我知道这是错误的)
Select *,
(Select count(*) from accounts
Where option1 != 'solo' And option2 != 0
And --all 3 ids and custId equal to the current row
) --this is the part i don't know how to do
From accounts
Where custId = 1 And Type = 'foo' And (option1 = 'solo' Or option2 = 0)
我的大脑正在围绕如何做到这一点转圈。谢谢您的帮助。