我有一个灯泡树结构。我想打开从树叶开始的所有灯泡。灯泡不能打开,除非它的所有直接子节点都打开。
树结构中节点之间的关系如表A所示:
表一:
node_id 整数
child_node_id 整数
表 B 表示树中的节点:
表乙:
id 整数
状态布尔值
表 B的状态表示状态 true = on 和 false = off。
问题:
我想选择所有已关闭且所有直系子项均已打开的灯泡。
这可能非常简单,但我似乎无法理解它。
我有一个灯泡树结构。我想打开从树叶开始的所有灯泡。灯泡不能打开,除非它的所有直接子节点都打开。
树结构中节点之间的关系如表A所示:
表一:
node_id 整数
child_node_id 整数
表 B 表示树中的节点:
表乙:
id 整数
状态布尔值
表 B的状态表示状态 true = on 和 false = off。
问题:
我想选择所有已关闭且所有直系子项均已打开的灯泡。
这可能非常简单,但我似乎无法理解它。
表演时
RETURN QUERY ...
在 PL/pgSQL 函数中,之后是否可以直接访问累积到记录堆中的行数,这些记录在函数结束时返回?
例子:
RETURN QUERY SELECT * FROM tableA; -- 14 records
RETURN QUERY SELECT * FROM tableB; -- 8 records
RETURN QUERY SELECT * FROM tableC; -- 22 records
现在累积的记录数应该是 44。
我正在尝试编写一个plpgsql
函数,该函数从树结构的记录中递归返回一组列。
我有一个数据表和一个将数据链接在一起的表:
DATATABLE
-----------
id integer
value text
info text
LINKTABLE
-----------
link integer
parent integer
我的想法是在以下功能中做类似的事情:
CREATE OR REPLACE FUNCTION my_function(itemID integer)
RETURNS TABLE(id integer, value text) AS
$BODY$
BEGIN
RETURN QUERY SELECT my_function(A.link) FROM linktable A, datatable B
WHERE A.parent = B.id AND B.id = itemID) C;
RETURN QUERY SELECT id, value FROM datatable WHERE id = itemID;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
但这不起作用,我在第一个查询中收到错误:
错误:查询结构与函数结果类型不匹配
我的Just-In-Brain编译器没有检测到任何问题,那么我在这里做错了什么?
考虑一下我的所有模式名称都在一个表中,而我的所有表名都在另一个表中的情况。
是否可以执行以下操作(伪代码)?
SELECT value FROM (SELECT schema_name FROM schemas).(SELECT table_name FROM tables)
还是我必须将查询分解为三个 SELECT?