Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql对同一查询使用不同的列(有向图为无向图)_Sql_Graph - Fatal编程技术网

sql对同一查询使用不同的列(有向图为无向图)

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以相同的方式使用

假设我有一个关系表,如有向图中的关系表。对于某些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
以相同的方式使用

我知道通过将表格翻一番是可以实现的:

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
。它会占用更多的磁盘空间吗?不是永久的

如果查询的处理需要将数据保存到磁盘,那么它将为中间结果使用更多的临时存储

不过,我建议,如果您想要一个具有这种表示形式的无向图,那么添加表中尚未存在的加法对。这将使用更多的磁盘空间。但你不必玩查询游戏