2013-01-07 63 views
2

我有兩個表:什麼是在SQL中編寫此查詢的正確方法?

Names 
- id (int) 
- name (string) 

Relationships 
- id1 (int) 
- id2 (int) 

我想查詢有一定的ID1所有關係的列表,我想包括從結果查詢名稱的名稱。

那麼,結果將有四列

  • ID1
  • ID2
  • name_for_id1
  • name_for_id2

這可能嗎?我知道我可以做一個內部連接來包含其中一個名稱,但我不知道如何包含這兩個名稱。

對於一個名字,我會做這樣的事情:

select Relationships.id1, Relationships.id2, Names.name from Relationships 
inner join Names 
on Names.id1 = Relationships.id1 

回答

4

您可以參加兩次表。

SELECT 
    r.id1, 
    r.id2, 
    n1.name, 
    n2.name 
FROM Relationships r 
INNER JOIN Names n1 ON r.id1 = n1.id 
INNER JOIN Names n2 ON r.id2 = n2.id 
+0

我想知道這是否是正確的解決方案!我擔心它會返回兩行,一個是id1,一個是id2。稍後我會去看看。 – bgoosman

1

你想要做第二次加入Names。您可以使用表別名來指定哪個連接是哪個連接。

select r.id1, r.id2, n1.name, n2.name 
from Relationships r 
inner join Names n1 
    on n1.id = r.id1 
inner join Names n2 
    on n2.id = r.id2 
+0

你能解釋一下你的查詢嗎?這有點混亂! – CodeLover

+1

@CodeLover這就是說,你從'Relationships'中拉出所有行,使用'r'來保持簡短。對於'r'中的每一行,你都會加入'Names',其中'id1'與'id'匹配,調用'n1'。然後你再次加入'r'和'Names',這次匹配'id2',調用這些匹配的行'n2'。您將'names'命名爲'n1'和'n2',因爲否則無法區分哪個'name'是哪個 - 這樣'n1.name'和'n2.name'明確引用與id1匹配的名稱'和'id2'。代碼n解釋的 –

+0

'+ 1' – CodeLover

相關問題