2017-12-18 12 views
2

나는 두 개의 노드라는 이름의 테이블, 링크,과 같이했습니다 :내부 합류 두 번 더 결과를 반환

--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 

내가 fromx, fromy 및 독극물, 장난감을 일치시켜 세 번째 테이블을 생성하고 싶습니다를 노드 테이블에서 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 

나는 "임시 테이블 또는를 만들 행복 해요.

+0

이가. 내가 흥미로운 문제 데이터를 다시,하지만 난거야됩니다 현재 SQL Server에만 액세스 할 수 있으므로 가능하면 표준으로 사용하는 구문을 가지고 놀아 보겠습니다. –

+0

다른 사람들이 제안한 것처럼 대부분의 경우 데이터와 관련이 있습니다. 명령 줄 SQLite 셸 (sqlite3. exe Windows), ".dump"를 사용하여 SQL 문을 생성 할 수 있습니다 모든 테이블 작성 및 명령문에 삽입하십시오. 그 결과물을 질문에 추가하면됩니다. 다른 사용자는 스키마와 데이터를 재현 할 수 있습니다. – Fabian

답변

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

+0

대단히 감사합니다! 이 불행히도 sqlite에서 작동하지 않습니다, 그리고 나는 이유를 모르겠다. (나는 그것을 테스트하기 위해 SQLiteStudio를 사용하고있다). 쿼리를 실행할 때 아무 것도 반환하지 않습니다. : –

+0

나는 본질적으로 SQL Server에서 동일한 쿼리를 사용하여 올바른 결과를 얻었습니다. –

+0

@PatJones 저는 조앤이 My SQL에서 올바르게 실행되는 SQL Fiddle에 대한 링크를 게시했습니다. SQLite와 관련 있다고 생각합니다. ? –