[英]Creating a mysql Table from another Table
这是我的问题:我有一张表与人和物之间的关系。
Table logs
| id | user_id | object_id |
----------------------------
| 1 | 25488 | 54879 |
----------------------------
| 2 | 25488 | 54880 |
----------------------------
| 3 | 35487 | 54880 |
----------------------------
我想创建一个新表,其中每一行都是用户,每列都是一个对象。 如果用户与对象有关系,我将输入1,如果不是0。
Table User
| id | user_id | o54879 | o54880 | o87984 | ...
--------------------------------------------------------
| 1 | 25488 | 0 | 1 | 0 | ...
--------------------------------------------------------
| 2 | 35487 | 0 | 1 | 1 | ...
--------------------------------------------------------
我用java做了工作,但速度很慢。 创建表是好的,但然后我遍历每个用户并创建正确的SQL查询(作为字符串)。 所以每次我都会查询提取数据,而另一个则在新表中输入数据。 我在数据库中有10万用户,所以需要一段时间。
是否有更快的方法来实现这一点,减少数据库的事务?
你有目的地表,然后你知道你需要的对象列表。
此过程称为旋转表。 在MySQL中,您需要明确地执行此操作。 以下是使用聚合的示例:
insert into table2(user_id, o54879, o54880, . . .)
select user_id,
max(object_id = 54879),
max(object_id = 54880),
. . .
from logs
group by user_id;
编辑:
这使用MySQL约定, 0
为假, 1
为真。 以上逻辑相当于:
max(case when object_id = 54879 then 1 else 0 end),
max(case when object_id = 54880 then 1 else 0 end),
有时候,我更喜欢显式的case
语句,因为那是标准的SQL。 有时,我更喜欢MySQL约定,因为它确实简化了代码(代价是使非程序员的可读性略低)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.