MySQL:来自另一个表的一行中的多个ID

时间:2014-05-21 15:31:04

标签: mysql

这可能有点令人费解,但我会试一试。

我有一个包含事件数据的表:

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

并且from位置和位置是另一个能力

中引用的ID
| id | name    |
| 12 | london  |
| 13 | paris   |
| 14 | newyork |
| 15 | tokyo   |

我的问题是我需要根据位置搜索第一个表,但是在第二个表中使用名称,我想尽可能简单地使用一个查询。

如果它是一列,我可以只进行连接,并且可以使用该名称,但由于它是两个,这不起作用。

我可以在第一个表中搜索名称,然后使用id,使用它来搜索另一个表 - 但我想在一个查询中执行此操作。

所以我的问题 - 有没有办法简单地用相应的名称替换id - 然后在一个查询中进行搜索?

我会再说一件事 - 我没有说明这一点。如果我有,我会完全放弃使用id并简单地使用名称作为键。但现在它就是这样 - 让我们假设我无法改变它。

由于

1 个答案:

答案 0 :(得分:1)

如果您想检查from或to location是否是特定位置: -

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'