Java 使用JDBC旋转非常大的表
我想从另外两个表创建一个新表。问题是我有太多的专栏,这使一切崩溃 我拥有的第一个表是用户和对象之间的“连接”Java 使用JDBC旋转非常大的表,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我想从另外两个表创建一个新表。问题是我有太多的专栏,这使一切崩溃 我拥有的第一个表是用户和对象之间的“连接” Table User | id | user_id | o54879 | o54880 | o87984 | ... -------------------------------------------------------- | 1 | 25488 | 0 | 1 | 0 | ... ----------------
Table User
| id | user_id | o54879 | o54880 | o87984 | ...
--------------------------------------------------------
| 1 | 25488 | 0 | 1 | 0 | ...
--------------------------------------------------------
| 2 | 35487 | 0 | 1 | 1 | ...
--------------------------------------------------------
第二个表将每个对象指定给一个类别:
Table Cat
| id | object_id | category |
---------------------------------
| 1 | o54879 | 1 |
---------------------------------
| 2 | o54880 | 2 |
---------------------------------
| 3 | o56457 | 2 |
---------------------------------
| 4 | o59782 | 7 |
---------------------------------
我想要的是像这样的第三张桌子
Table UserGroupedByCat
| id | user_id | c1 | c2 | c3 | ...
---------------------------------------------
| 1 | 25488 | 0.4 | 0.1 | 0.7 | ...
---------------------------------------------
| 2 | 35487 | 0.01 | 0.75 | 0.2 | ...
---------------------------------------------
c1,c2,c3。。。应该是用户对每个类别的平均值
主要的问题是,我的数据库中有500个对象,当我尝试构建这样的sql查询时,会使所有对象崩溃:
INSERT INTO UserGroupedByCat (user_id, C1, C2, C3, C4, C5, C6, c7)
SELECT user_id,
((o34508629+o52965151+o52630004+o34518676+...)/<sum of all objects>),
((o62846406+o50349529+...)/<sum of all objects>), ...
FROM `User`;
插入UserGroupedByCat(用户id、C1、C2、C3、C4、C5、C6、c7)
选择用户id,
((o34508629+o52965151+o52630004+o34518676+…)/),
((o62846406+o50349529+…)/)。。。
来自“用户”;
有没有更好(更快)的方法进行这样的查询?我会用3列重建第一个表(您也可以有一个数字ID,但我发现您无论如何都不使用它):
这将使您的系统更具可扩展性,并消除您所谈论的那些问题您所说的“使一切崩溃”是什么意思?您是否收到某种错误消息?你到底想实现什么?我可以等两个小时,但计算机没有响应。我可以等两个小时,但计算机没有响应。你是否至少添加了日志消息(可能使用记录器或幼稚的
系统.out.println
)以确保你的应用程序根本没有工作?是的,我添加了。我也在一个较小的数据库上尝试了我的代码,它可以工作。你能发布你的整个SQL查询吗?目前,它看起来像是对每个用户的每个值求和,这可能不是您想要的。
USER_ID CATEGORY_ID SCORE
25488 o54879 0
25488 o54880 1
25488 o87984 0
...
35487 o54879 0
35487 o54880 1
35487 o87984 1
...