检查SQL有向图的双向性



在我的火鸟数据库中,我有两个表,在第一个(地点)我保留一些位置信息(如RPG游戏),这是非常简单的,看起来像这样:

名称
位置1
位置2
位置3
位置4
位置5

和第二个表(CONNECTIONS)连接这些位置,这样我就知道可以从哪个位置到哪里。这种情况下,每一行只在一个方向上连接两个位置,所以如果我想创建双向连接,我必须在CONNECTIONS表中插入两行。

连接示例:

<>之前 first_location | second_location 位置1 |位置2位置1 |位置3位置2 |位置1位置2 |位置4位置3 |位置1位置3 |位置4位置4 |位置5位置5 |位置1之前

如你所见,这些连接是某个有向图的表示。

我需要创建一个SQL查询,将显示我所有的位置(图节点),我可以去从给定的loc/节点,另外,我是否可以回到前一个节点。第一部分很简单,因为

select second_location 
from connections 
where connections.first_location = 'Location 1'

给出了连接到位置1的所有节点,但是当我试图获得有关此连接的双向性的信息时,问题就开始了。

到目前为止,我已经尝试了这样做:

select c.first_location as first, c.second_location as second, p.count
from connections as c
where c.first = 'Location 1' 
inner join (
    select count(*) 
    from connections 
    where connections.first_location = c.second 
    and connections.second_location = 'Location 1'
) as p

,我希望得到这样的结果:

<>之前第一次|第二次|计数位置1 |位置2 | 1位置1 |位置3 | 0之前

但是我错了。我该怎么做才能解决这个问题?

正如TS最初发布的问题:

我不再需要帮助了,不知怎么的,在我发布这个问题之后我就解决了这个问题。

SELECT p.first_location, p.second_location, (
    SELECT COUNT (*)
    FROM (
        SELECT q.first_location, q.second_location 
        FROM connections AS c 
        WHERE p.first_location = q.second_location 
        and p.second_location = q.forst_location
    ) 
)
FROM connections AS p 
WHERE p.first_location = 'Location 1'

您可以使用self JOIN:

来解决这个问题。
SELECT fwd.first, fwd.second, bck.first IS NOT NULL returnable
  FROM connections fwd LEFT JOIN connections bck
    ON (fwd.first=bck.second AND fwd.second=bck.first)

http://sqlfiddle.com/!12个/ec191/13/0

相关内容

  • 没有找到相关文章

最新更新