[英]Many-to-Many Select
I have 3 tables: 我有3张桌子:
users : 用户 :
id name
1 Jack
2 Vasya
3 John
4 Robert
5 Dmitry
6 Dylan
cities : 城市 :
id city
1 London
2 Kyiv
3 New-York
4 Chicago
5 Moscow
6 Dubai
users_cities : users_cities :
user_id city_id
1 1
3 1
5 6
2 3
4 5
6 6
I need to select users with Jack in London by Jack's id(users.id = 1) or users in Dubai with Dmitry(users.id = 5) using JOIN. 我需要使用JOIN通过Jack的id(users.id = 1)选择伦敦的Jack用户或在Dmitry(users.id = 5)迪拜的用户。 How could I do it? 我该怎么办?
What I have tried: 我试过的
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
It returns: 它返回:
username city_id
Jack 1
Jack 1
You're so very close. 你好亲近 You only need to JOIN
to user_cities
once for your query. 您只需要将JOIN
到user_cities
一次即可。 Then use the WHERE
clause to determine the users or cities you wish to filter on. 然后使用WHERE
子句确定要过滤的用户或城市。
If you want the city name in the result set then make an additional join from user_cities
to cities
. 如果要在结果集中输入城市名称,则可以将user_cities
到cities
。
As you are joining twice on the same result set ( user_cities
) you are effectively querying that result twice, which is why you are getting duplicate 'Jacks'. 当您在同一个结果集( user_cities
)上加入两次时,您实际上在查询该结果两次,这就是为什么您得到重复的“夹克”的原因。
If this is not exactly what you need, then adjust your WHERE
clause to determine how you would like to filter the result set. 如果这不是您所需要的,请调整WHERE
子句,以确定您希望如何过滤结果集。
SELECT
u.username,
c.city
FROM
users as u
INNER JOIN users_cities as uc ON u.id = uc.user_id
INNER JOIN cities as c ON uc.city_id = c.id
WHERE
u.id = 1 -- Jack
OR u.id = 5 -- Dimitry
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.