在我的火鸟数据库中,我有两个表,在第一个(地点)我保留一些位置信息(如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