gpt4 book ai didi

java - 优化:使 SQL 查询脱离循环

转载 作者:行者123 更新时间:2023-11-29 18:37:50 25 4
gpt4 key购买 nike

我有两个具有 1 到 n 关系的表。表爱好有一个名为“userid”的表用户外键

SELECT * FROM hobbies WHERE userid = 7

可以有多个结果。表 users 包含用户个人资料数据列表,表 hobbies 包含用户爱好列表。我想打印多个用户的个人资料信息列表以及每个用户的爱好。 (爱好连接成一个字符串)我目前有以下 sql 查询:(伪代码):

ResultSet result = executeQuery("SELECT * FROM users;");

for each returned row: executeQuery("SELECT * FROM hobbies WHERE userid =" + result.getInt("ref"));

如何让 SQL 查询脱离循环以优化大量用户的性能?

我试图执行 LEFT JOIN,然后在 java 而不是 SQL 中执行 WHERE ref= 检查问题是,然后我得到重复的用户,并且在处理结果集时我只想为每个用户打印一行我也不确定 JOIN 是否真的能提高性能,因为我必须处理更多行。

table users
+--------+------+---------+--------+
| userid | name | country | telno |
+--------+------+---------+--------+
| 1 | John | USA | 123456 |
| 2 | Max | Germany | 345678 |
+--------+------+---------+--------+

+--------------+------------+
| userid |hobby |
+--------------+------------+
| 1 | football |
| 1 | basketball |
| 2 | TV |
| 2 | Music |
| 2 | football |
+--------------+------------+

example output:
John, USA, 123456, {football, basketball}
Max, Germany, 345678, {TV, Music, football}

最佳答案

这很可能是最快的解决方案

SELECT name, country, telNo, GROUP_CONCAT(hobby)
FROM users u LEFT JOIN hobbies h ON u.id = h.userId
GROUP BY name, country, telNo

参见https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat用于格式化选项。

这只对最终输出有好处,例如,如果你的爱好包含逗号,你将无法唯一地解析它们。

关于java - 优化:使 SQL 查询脱离循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45139358/

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