mysql - MySQL 连接表和数据透视表(一更)
问题描述
我有以下 WordPress 表:
wp_f7h0p6_users
---------------------------------------
| ID | user_login | user_email |
| 1 | johnd | johnd@example.com |
| 2 | foob | foob@example.com |
wp_f7h0p6_usermeta
------------------------------------------------------
| umeta_id | user_id | meta_key | meta_value |
| 1 | 1 | first_name | John |
| 2 | 1 | last_name | Doe |
我想得到这样的 SELECT 结果,为此我需要以wp_f7h0p6_usermeta
某种方式转置表格。
-----------------------------------------------------------
| user_login | user_email | first_name | last_name |
| johnd | johnd@example.com | John | Doe |
| foob | foob@example.com | Foo | Bar |
我尝试过这样的事情。但它不会将结果分组到每个用户的一条记录中:
SELECT DISTINCT
user_login,
(CASE M.meta_key WHEN 'first_name' THEN M.meta_value END) first_name,
(CASE M.meta_key WHEN 'last_name' THEN M.meta_value END) last_name,
(CASE M.meta_key WHEN 'billing_first_name' THEN M.meta_value END) billing_first_name
FROM wp_f7h0p6_users U
INNER JOIN wp_f7h0p6_usermeta M ON U.ID = M.user_id
结果如下所示:
-----------------------------------------------------------
| user_login | user_email | first_name | last_name |
| johnd | johnd@example.com | | |
| johnd | | John | |
| johnd | | | Doe |
如何正确分组?
解决方案
您可以尝试使用虚假聚合和分组依据
SELECT DISTINCT
user_login,
max((CASE M.meta_key WHEN 'first_name' THEN M.meta_value END) ) first_name,
max((CASE M.meta_key WHEN 'last_name' THEN M.meta_value END) )last_name,
max((CASE M.meta_key WHEN 'billing_first_name' THEN M.meta_value END)) billing_first_name
FROM wp_f7h0p6_users U
INNER JOIN wp_f7h0p6_usermeta M ON U.ID = M.user_id
GROUP BY user_login
或使用别名对同一个表使用多个连接
SELECT
user_login,
M1.meta_value first_name,
M2.meta_value last_name,
M3.meta_value billing_first_name
FROM wp_f7h0p6_users U
INNER JOIN wp_f7h0p6_usermeta M1 ON U.ID = M1.user_id and M1.meta_key = 'first_name'
INNER JOIN wp_f7h0p6_usermeta M2 ON U.ID = M2.user_id and M2.meta_key = 'last_name'
INNER JOIN wp_f7h0p6_usermeta M3 ON U.ID = M3.user_id and M3.meta_key = 'billing_first_name'
推荐阅读
- php - 输入数据的规则是什么?
- android - 如何将库添加到 testImplementation 和 androidTestImplementation
- sql - 使用标签改进 Top N 最近查询的合适索引
- c++ - 带返回条件的openmp优化
- r - R中的高斯过程
- ruby - Ruby 2.7 计算哈希键数组
- python - Python背包函数,缺少参数
- ruby-on-rails - 如何解决此错误:“您的捆绑包仅支持平台 [],但您的本地平台是 [“ruby”、“x86_64-darwin-19”],并且没有兼容...”
- r - 在 tabItem 中创建后的 .Rmd 输出在闪亮仪表板的所有 tabItems 的正文中创建第二个仪表板
- python - pyspark 地图类型包含重复的键