mysql - 优化查询以使用两个表之间的连接并将行转换为列
问题描述
我知道这是一个已经完成的问题,但是我找到的所有答案都不适合我的需要,而且,更重要的是,我无法自己找到合适的解决方案。
我解释一下情况:
第一个表中有 2 个表(用户、user_preferences),正如您可能猜到的那样,名称、姓氏、id 和登录名(还有更多数据,但这些是我需要的),在第二个表中,我们有 user_id、preferences_key 和偏好值。
如果我运行我的查询:
select a.id, a.login, a.first_name, a.last_name, b.preferences_key from users a, user_preferences b where a.id=b.user_id and b.preferences_key like 'msg%';
我收到这样的答案:
+----+---------+---------------+---------------+----------------------+
| id | login | first_name | last_name | preferences_key |
+----+---------+---------------+---------------+----------------------+
| 4 | usrn1 | User1 | NumberOne | msg002 |
| 7 | usrn5 | User5 | NumberFive | msg001 |
| 7 | usrn5 | User5 | NumberFive | msg002 |
| 10 | usrn9 | User0 | NumberNine | msg002 |
+----+---------+---------------+---------------+----------------------+
我试图弄清楚如何从这个视图切换到这个:
+----+---------+---------------+---------------+--------+--------+
| id | login | first_name | last_name | msg001 | msg002 |
+----+---------+---------------+---------------+--------+--------+
| 4 | usrn1 | User1 | NumberOne | No | Yes |
| 7 | usrn5 | User5 | NumberFive | Yes | Yes |
| 10 | usrn9 | User0 | NumberNine | No | Yes |
+----+---------+---------------+---------------+--------+--------+
如果您有任何建议,我们将不胜感激,顺便说一句,如果您能添加更多解释,我将更加感激。
谢谢
解决方案
据我所知,没有一种简单的方法可以像您想要的那样轻松旋转表格。
通过JOIN多次连接到同一个表,有以下手动方法。像下面这样的东西应该可以工作:
SELECT
a.id, a.login, a.first_name, a.last_name,
IF(b1.preferences_key IS NULL, 'No', 'Yes') msg001,
IF(b2.preferences_key IS NULL, 'No', 'Yes') msg002
FROM
users a
LEFT JOIN user_preferences b1
ON b1.user_id = a.id
AND b1.preferences_key = 'msg001'
LEFT JOIN user_preferences b2
ON b2.user_id = a.id
AND b2.preferences_key = 'msg002';
如果这没有帮助。查看MySQL 数据透视表
推荐阅读
- service-worker - glob 模式与任何文件工作箱都不匹配
- php - 辅助函数在表单验证回调中总是返回 false
- c# - 如何在 Entity Framework Core 的迁移中执行本机 SQL?
- azure - 从 Azure 数据工厂 (ADF) 调用 Azure Function 时出现异常
- mysql - 如何在一张表 MySQL 中制作故事和保存的故事?
- python - 矩阵及其逆的乘积
- email - JavaMail 与 Outlook
- sql - SQL Count 然后 Sum?
- java - 如何将元素添加到java中排序数组中的正确位置
- mysql - 将连接转换为mysql上的子查询