sql对同一查询使用不同的列(有向图为无向图)
假设我有一个关系表,如有向图中的关系表。对于某些ID对,同时存在1->2和2->1关系,而对于其他ID对,则不存在。某些节点仅存在于一列中sql对同一查询使用不同的列(有向图为无向图),sql,graph,Sql,Graph,假设我有一个关系表,如有向图中的关系表。对于某些ID对,同时存在1->2和2->1关系,而对于其他ID对,则不存在。某些节点仅存在于一列中 a b 1 2 2 1 1 3 4 1 5 2 现在我想把它当作无向图来处理。例如,分组、使用两列进行筛选。例如,过滤节点5并计算其余节点的邻居 node neighbor_count 1 3 2 1 3 1 4 1 是否可以这样组合查询:第一列a使用,然后第列b以相同的方式使用
a b
1 2
2 1
1 3
4 1
5 2
现在我想把它当作无向图来处理。例如,分组、使用两列进行筛选。例如,过滤节点5并计算其余节点的邻居
node neighbor_count
1 3
2 1
3 1
4 1
是否可以这样组合查询:第一列a
使用,然后第列b
以相同的方式使用
我知道通过将表格翻一番是可以实现的:
select a,count(distinct(b))
from
(select * from grap
union all
select b as a, a as b from grap)
where (not a in (5,6,7)) and (not b in (5,6,7))
group by a;
然而,实际的表相当大(10^9-1^10对)。union
是否需要额外使用磁盘?对我来说,对基地进行一次扫描已经相当慢了。有更好的方法吗
(目前数据库是sqlite,但平台特定性越低,答案越好)仅在查询期间生成
union all
。它会占用更多的磁盘空间吗?不是永久的
如果查询的处理需要将数据保存到磁盘,那么它将为中间结果使用更多的临时存储
不过,我建议,如果您想要一个具有这种表示形式的无向图,那么添加表中尚未存在的加法对。这将使用更多的磁盘空间。但你不必玩查询游戏