2014-05-21 98 views
1

這可能有點複雜,但我會給它一個鏡頭。MySQL:來自另一個表的一行中的多個ID

我有活動數據表:

| id | event | from_location | to_location | 
| 1 | move |   12 |   14 | 
| 2 | move |   13 |   15 | 

和從位置和位置是另一個能夠

| id | name | 
| 12 | london | 
| 13 | paris | 
| 14 | newyork | 
| 15 | tokyo | 

我的問題提到的IDS是我需要同時搜索第一基於位置的表,但在第二個名稱中使用該名稱,並且我希望儘可能簡單地使用一個查詢來完成。

如果它是一列,我可以只做一個連接並且有可用的名稱,但因爲它是兩個,所以這是行不通的。

我可以在第一個表格中搜索名稱,然後使用該ID來搜索其他表格 - 但我希望在一個查詢中執行該操作。

所以我的問題 - 有沒有辦法簡單地用相應的名稱替換ID - 然後做一個查詢的搜索?

我想再說一點 - 我沒有設置它。如果我有,我會完全放棄使用ID,並簡單地使用名稱作爲鍵。但現在它是這樣 - 讓我們假設我無法改變這一點。

感謝

+2

只需加入表格兩次。每次給它一個唯一的別名。 – Strawberry

+2

只需加入第一個表格,並加上兩個第二個表格,如'from table1 t join table2 t1 on(...)left join table2 t2 on(t。... t2。...)' –

+0

順便說一句,以ID爲鍵是個好主意。城市更經常地改變他們的名字比你想象的更多! – Strawberry

回答

1

如果要檢查來自或去往位置是一個特別的一個: -

SELECT event_data.id, event_data.event, event_data.from_location, event_data.to_location 
FROM event_data 
INNER JOIN locations l1 ON event_data.from_location = l1.id 
INNER JOIN locations l2 ON event_data.to_location = l2.id 
WHERE l1.name = 'somewhere' 
OR l2.name = 'somewhere' 

如果你想從位置特殊,另一個特別的位置

SELECT event_data.id, event_data.event, event_data.from_location, event_data.to_location 
FROM event_data 
INNER JOIN locations l1 ON event_data.from_location = l1.id 
INNER JOIN locations l2 ON event_data.to_location = l2.id 
WHERE l1.name = 'somewhere' 
AND l2.name = 'somewhereelse' 
+0

這是偉大的,感謝您的多個選項! – dgig

相關問題