首页 > 解决方案 > 是否可以将键用作列,将值用作键/值数据库结构的值?

问题描述

我需要从 MySQL 键值表中查询一些数据,但我想得到一个“正常”表作为结果,指定键作为列。

我的表示例USERS

ID, user_id, key,        value 
----------------------------------
1   1        first_name  Peter
2   1        last_name   Sputnick
3   2        first_name  Jan
4   2        last_name   Putgraver
5   2        country     Netherlands

我想要这个作为查询结果:

ID, first_name, last_name
----------------------------
1   Peter       Sputnick
2   Jan         Putgraaf

有没有一种好的和有效的方法来实现这一目标?请注意,我不想在结果中包含国家列。

我需要这个,因为我需要将此数据与另一个表中的数据连接起来,并且我不想为我需要的每个字段使用子查询。所以我不想做这样的事情:

SELECT *,
(SELECT value 
  FROM users 
  WHERE user_id = o.user_id 
    AND key = first_name),
(SELECT value 
  FROM users 
  WHERE user_id = o.user_id 
    AND key = last_name),
FROM orders o

标签: mysqljoinselectgroup-bypivot

解决方案


您可以使用条件聚合:

select 
    id,
    max(case when key = 'fist_name' then value end) first_name,
    max(case when key = 'last_name' then value end) last_name
from users
group by id

推荐阅读