请帮我设计一个sql查询来解决这个问题

sau*_*rav -2 mysql sql denormalization

替代文字

对于一个特定的名字,我想要获取居住在这个人居住的三个或更多城市的其他名字.

Omr*_*dan 12

这是你应该做的:

重新设计您的数据库以拥有城市表:

city(id int, name varchar)
Run Code Online (Sandbox Code Playgroud)

和用户表:

user(id int, name varchar, ...)
Run Code Online (Sandbox Code Playgroud)

和user_city表:

user_city(user_id int, city_id int)
Run Code Online (Sandbox Code Playgroud)

仅此一项就可以消除每个用户10个城市的限制.

找到用户居住的城市:

select city_id form user_city where user_id = ?
Run Code Online (Sandbox Code Playgroud)

现在你如何从该列表中找到居住在3个或更多城市的用户?一种方法是从每个用户所在的列表中计算城市数量,例如:

select user_id,count(*) n 
from user_city 
where city_id in (select city_id 
                  from user_city 
                  where user_id = ?) 
group by user_id having n >= 3;
Run Code Online (Sandbox Code Playgroud)

我没有真正测试这个,但它应该工作.

你还必须弄清楚如何索引这些表.