多对多选择

时间:2015-09-30 21:39:31

标签: mysql many-to-many

我有3张桌子:

用户

id  name
1   Jack
2   Vasya
3   John
4   Robert
5   Dmitry
6   Dylan

城市

id  city
1   London
2   Kyiv
3   New-York
4   Chicago
5   Moscow
6   Dubai

users_cities

user_id city_id
1       1
3       1
5       6
2       3
4       5
6       6

我需要使用JOIN选择杰克在伦敦的杰克的用户(users.id = 1)或迪拜的用户使用Dmitry(users.id = 5)。 我怎么能这样做?

我尝试过:

SELECT `u`.`username`, `uc`.`city_id` FROM `users` as `u`
    INNER JOIN `users_cities` as `uc` ON `u`.`id` = `uc`.`user_id`
    INNER JOIN `users_cities` as `uc1` ON `uc1`.`city_id` = `uc`.`city_id`
WHERE `u`.`id` = 1

它返回:

username    city_id
Jack        1
Jack        1

1 个答案:

答案 0 :(得分:0)

你非常接近。对于您的查询,您只需要paste(txt, collapse = " ") -> txt JOIN一次。然后使用user_cities子句确定您要过滤的用户或城市。

如果您想要结果集中的城市名称,请进行从WHEREuser_cities的其他加入。

当您在相同的结果集(cities)上加入两次时,您实际上是在两次查询结果,这就是为什么您会获得重复的“Jacks”。

如果这不是您所需要的,请调整user_cities子句以确定您希望如何过滤结果集。

WHERE