gpt4 book ai didi

mysql - SQL合并和展平表

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

在 MySQL 中,我有如下三个表:

用户:

USER_ID | USERNAME
1 | Homer Simpson

字段:

FIELD_ID | FIELD_NAME
1 | Phone
2 | Address

FIELD_VALUES:

USER_ID | FIELD_ID | FIELD_VALUE
1 | 1 | 555-1212
1 | 2 | 10 biteme drive

我想要做的是合并这三个表,这样我最终每个用户都有一行,字段名称作为列标题和字段值,所以我最终得到:

用户表:

USER_ID  | USER_NAME     | PHONE    | ADDRESS
1 | Homer Simpson | 555-1212 | 10 biteme drive

最佳答案

如果字段名称(电话和地址)是固定的,您可以使用这个技巧来透视数据:

SELECT
users.user_id,
users.user_name,
MAX(CASE WHEN field_id=1 THEN field_value END) AS Phone,
MAX(CASE WHEN field_id=2 THEN field_value END) AS Address
FROM
users INNER JOIN field_values
ON users.user_id = field_values.user_id
GROUP BY
users.user_id,
users.user_name

但是如果你的值不是固定的,你需要使用动态查询:

SELECT    
CONCAT(
'SELECT users.user_id,users.username,',
GROUP_CONCAT(CONCAT('MAX(CASE WHEN field_id=', field_id, ' THEN field_value END) AS `', field_name, '`')),
' FROM users INNER JOIN field_values ON users.user_id = field_values.user_id',
' GROUP BY users.user_id, users.username')
FROM `fields` INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

请参阅 fiddle here .

关于mysql - SQL合并和展平表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846828/

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