gpt4 book ai didi

mysql - 多对多选择

转载 作者:行者123 更新时间:2023-11-29 21:58:46 25 4
gpt4 key购买 nike

我有 3 张 table :

用户:

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

user_cities:

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

我需要使用 JOIN 通过 Jack 的 id(users.id = 1) 选择位于伦敦的 Jack 用户或使用 JOIN 选择位于迪拜的 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

最佳答案

你们离得很近。您只需 JOINuser_cities 一次即可进行查询。然后使用 WHERE 子句确定您要过滤的用户或城市。

如果您希望结果集中包含城市名称,请进行从 user_citiescities 的额外联接。

当您在同一结果集 (user_cities) 上加入两次时,您实际上是在查询该结果两次,这就是您获得重复“Jack”的原因。

如果这不完全符合您的需要,请调整您的 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

关于mysql - 多对多选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32876056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com