我正在处理查询以从层次结构中提取数据
e.g。
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs, ys, zs)
它按预期工作。
static PyObject *
range_richcompare(PyObject *self, PyObject *other, int op)
{
int result;
if (!PyRange_Check(other))
Py_RETURN_NOTIMPLEMENTED;
switch (op) {
case Py_NE:
case Py_EQ:
result = range_equals((rangeobject*)self, (rangeobject*)other);
if (result == -1)
return NULL;
if (op == Py_NE)
result = !result;
if (result)
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
case Py_LE:
case Py_GE:
case Py_LT:
case Py_GT:
Py_RETURN_NOTIMPLEMENTED;
default:
PyErr_BadArgument();
return NULL;
}
}
它也按照我期望的顺序返回数据,而且由于结果的发现方式,它会这样做。
问题是,我可以依靠这样的顺序吗?
答案 0 :(得分:2)
是的,有定义的订单。在Postgres WITH
doc中,他们给出了以下示例:
WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (
SELECT g.id, g.link, g.data, 1,
ARRAY[ROW(g.f1, g.f2)],
false
FROM graph g
UNION ALL
SELECT g.id, g.link, g.data, sg.depth + 1,
path || ROW(g.f1, g.f2),
ROW(g.f1, g.f2) = ANY(path)
FROM graph g, search_graph sg
WHERE g.id = sg.link AND NOT cycle
)
SELECT * FROM search_graph;
关于他们在提示框中的说法(格式化我的):
递归查询评估算法生成其输出 广度优先搜索顺序。您可以在深度优先中显示结果 通过使外部查询
ORDER BY
成为“路径”列来搜索顺序 以这种方式构建。
根据INSERT
语句,您似乎在上面的案例中获得广度优先输出,所以我想如果您愿意,可以修改您的外部{{ 1}}以另一种方式订购。
我相信你案例中深度优先的模拟可能是这样的:
SELECT
正如我所期望的那样(在我脑子里经历的事情)产生这个:
WITH RECURSIVE parent_org (id, parent_id, name) AS (
SELECT id, parent_id, name
FROM org
WHERE id = 3
UNION ALL
SELECT o.id, o.parent_id, o.name
FROM org o, parent_org po
WHERE po.parent_id = o.id)
SELECT id, parent_id, name
FROM parent_org
ORDER BY id;