Select 在 select 中计算新字段
Select in select to compute a new field
假设 Firebird (v.2.5) Table 名称 TREE
有两列 NODE_ID
和 PARENT_NODE
。我想查询以获取 NODE_ID = 1
的记录并计算一个新字段 CHILD_COUNT
.
在该查询中,CHILD_COUNT
必须包含记录数(在同一个 table 中),其中 PARENT_NODE = NODE_ID
.
我的开始查询是:
SELECT NODE_ID, PARENT_NODE, (select count(*) from TREE where PARENT_NODE = NODE_ID) as CHILD_COUNT
FROM TREE
WHERE PARENT_NODE = 1;
使用该查询,CHILD_COUNT
始终为 0。我如何执行此查询才能为所有 TREE
table 行获取 CHILD_COUNT
进程?
对于这个需求,下面粘贴正确的代码
Suppose a Firebird (v.2.5) Table name TREE have two columns NODE_ID
and PARENT_NODE, I would like to make query to get records with
NODE_ID = 1
SELECT NODE_ID, PARENT_NODE
FROM TREE
WHERE NODE_ID = 1
对于完整的请求,您需要对 table 本身进行自连接。
SELECT
T1.Node_ID,
T1.Parent_mode,
T22.CHILD_COUNT
FROM TREE T1,
(
SELECT T2.Node_ID, COUNT(*) as CHILD_COUNT
FROM TREE t2
WHERE NODE_ID = 1
Group by T2.Node_ID
) as T22
WHERE T1.PARENT_NODE = T22.NODE_ID
问题出在子查询中的条件:
where parent_node = node_id
这会搜索两个值都相等的行,这不是您想要的:您想要父级等于外部查询 中的节点的行。为此,您需要关联 子查询与外部查询。因此,在列前加上它们所属的 table 的别名:
select node_id, parent_node,
(select count(*) from tree t1 where t1.parent_node = t.node_id) as child_count
from tree t -- ^ -- -- ^ --
where parent_node = 1;
假设 Firebird (v.2.5) Table 名称 TREE
有两列 NODE_ID
和 PARENT_NODE
。我想查询以获取 NODE_ID = 1
的记录并计算一个新字段 CHILD_COUNT
.
在该查询中,CHILD_COUNT
必须包含记录数(在同一个 table 中),其中 PARENT_NODE = NODE_ID
.
我的开始查询是:
SELECT NODE_ID, PARENT_NODE, (select count(*) from TREE where PARENT_NODE = NODE_ID) as CHILD_COUNT
FROM TREE
WHERE PARENT_NODE = 1;
使用该查询,CHILD_COUNT
始终为 0。我如何执行此查询才能为所有 TREE
table 行获取 CHILD_COUNT
进程?
对于这个需求,下面粘贴正确的代码
Suppose a Firebird (v.2.5) Table name TREE have two columns NODE_ID and PARENT_NODE, I would like to make query to get records with NODE_ID = 1
SELECT NODE_ID, PARENT_NODE FROM TREE WHERE NODE_ID = 1
对于完整的请求,您需要对 table 本身进行自连接。
SELECT T1.Node_ID, T1.Parent_mode, T22.CHILD_COUNT FROM TREE T1, ( SELECT T2.Node_ID, COUNT(*) as CHILD_COUNT FROM TREE t2 WHERE NODE_ID = 1 Group by T2.Node_ID ) as T22 WHERE T1.PARENT_NODE = T22.NODE_ID
问题出在子查询中的条件:
where parent_node = node_id
这会搜索两个值都相等的行,这不是您想要的:您想要父级等于外部查询 中的节点的行。为此,您需要关联 子查询与外部查询。因此,在列前加上它们所属的 table 的别名:
select node_id, parent_node,
(select count(*) from tree t1 where t1.parent_node = t.node_id) as child_count
from tree t -- ^ -- -- ^ --
where parent_node = 1;