内部连接两次没有返回结果

问题描述 投票:2回答:1

我有两个表名为节点和链接,如下所示:

--Links:
-----------------------------------
id    fromx   fromy    tox     toy
-----------------------------------
a1      x1      y1      x2      y2
a2      x2      y2      x3      y3
a3      x2      y2      x4      y4
a4      x1      y1      x4      y4
a5      x1      y1      x5      y5

--Nodes:
id       x   y
--------------
1       x1  y1
2       x2  y2
3       x3  y3
4       x4  y4
5       x5  y5

我想通过将Links表中的fromx,fromy和tox,toy与Nodes表中的x和y相匹配来生成第三个表,以生成如下所示的表:

linkid  fromid  toid
--------------------
  a1     1       2
  a2     2       3
  a3     2       4
  a4     1       4
  a5     1       5

为了获得该结果,我使用以下查询在节点表上使用此查询连接两次,但是我没有得到任何结果。

select links.id as linkid, 
n1.id as nodeid, fromx, fromy, tox from links 
inner join nodes n1 
inner join nodes n2
on 
links.fromx = n1.x 
and  links.fromy = n1.y
and links.tox = n2.x
and links.toy = n2.y

如果能有所帮助,我很乐意创建临时表等。

sql sqlite
1个回答
3
投票
select 
       l.id as link_id, 
       frm.id as from_id, 
       t.id as to_id
from  
       links l
inner join 
       nodes frm
       on frm.x = l.fromx
       and frm.y = l.fromy
inner join 
       nodes t
       on t.x = l.tox
       and t.y = l.toy

SQL Fiddle

© www.soinside.com 2019 - 2024. All rights reserved.