MySQL在表行上循环,运行另一个查询,连接结果
我有一个类似于my_表的表,并且名称列值是唯一的:MySQL在表行上循环,运行另一个查询,连接结果,mysql,list,loops,subquery,self-join,Mysql,List,Loops,Subquery,Self Join,我有一个类似于my_表的表,并且名称列值是唯一的: ID NAME RANK AGE 1 John 4 21 2 Sam 1 43 3 Tom 3 57 4 Bob 2 39 5 Dave 5 25 我想运行一个查询,其中我为每一行选择所有属性,再加上另一列,该列是按年龄描述排序的其他名称列表,而不是其本身的限制,比如说3,结果如下: NAME RANK AGE S
ID NAME RANK AGE
1 John 4 21
2 Sam 1 43
3 Tom 3 57
4 Bob 2 39
5 Dave 5 25
我想运行一个查询,其中我为每一行选择所有属性,再加上另一列,该列是按年龄描述排序的其他名称列表,而不是其本身的限制,比如说3,结果如下:
NAME RANK AGE SOME_LIST
John 4 21 Tom,Sam,Bob
Sam 1 43 Tom,Bob,Dave
Tom 3 57 Sam,Bob,Dave
Bob 2 39 Tom,Sam,Dave
Dave 5 25 Tom,Sam,Bob
SELECT name FROM my_table WHERE name <> 'John' ORDER BY age DESC LIMIT 3;
因此,为John获取一些_列表的查询如下:
NAME RANK AGE SOME_LIST
John 4 21 Tom,Sam,Bob
Sam 1 43 Tom,Bob,Dave
Tom 3 57 Sam,Bob,Dave
Bob 2 39 Tom,Sam,Dave
Dave 5 25 Tom,Sam,Bob
SELECT name FROM my_table WHERE name <> 'John' ORDER BY age DESC LIMIT 3;
我不知道1如何将这些结果转换成逗号分隔的单列,2如何对我的_表中的每一行运行此查询
更新:
正在接近此查询:
SELECT *, (SELECT GROUP_CONCAT(name) FROM my_table t1 WHERE t1.name <> t2.name ORDER BY age DESC LIMIT 3) AS some_list FROM my_table t2;
但是some_list列不遵守age desc order by,也不遵守限制。仅接受。您可以使用以下解决方案:
SELECT m1.*, SUBSTRING_INDEX(GROUP_CONCAT(m2.name ORDER BY m2.age DESC), ',', 3) AS 'SOME_LIST'
FROM my_table m1 LEFT JOIN my_table m2 ON m1.name <> m2.name
GROUP BY m1.ID
使用子字符串_索引可以限制逗号分隔值的数量。您也可以直接在组目录上按值排序。Perfect!谢谢