我知道这是一个已经解决的问题,但是我发现的所有答案都不适合我的需求,而且,更多的是,我无法自己提出适当的解决方案。
我解释了这种情况:
2个表(用户,用户首选项) 您可能会猜到,第一个有名称,姓氏,ID和登录名(有更多数据,但是这些是我需要的),而第二个有user_id,preferences_key和preferences_value。
如果我运行查询:
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 |
+----+---------+---------------+---------------+--------+--------+
如果您有任何建议,将不胜感激,并且,如果您可以添加更多说明,我将不胜感激。
谢谢
答案 0 :(得分:0)
实际上,并没有一种简单的方法可以像我想的那样轻松地旋转表。
有以下手动方法,可以多次加入同一张表。类似于以下应该的方法:
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 pivot table