簡體   English   中英

多對多選擇

[英]Many-to-Many Select

我有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通過Jack的id(users.id = 1)選擇倫敦的Jack用戶或在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 )上加入兩次時,您實際上在查詢該結果兩次,這就是為什么您得到重復的“夾克”的原因。

如果這不是您所需要的,請調整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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM