我不是 MySQL 大师,但我很好地掌握了基本知识。感谢您的反馈。
我有两个表user
和favorite
。每个用户都可以拥有多个独特的收藏夹。
表用户u
[ user_id + name ]
100 | Sally
餐 table 最爱
[ fav_id + user_id + fav_key + fav_val ]
1 | 100 | icecream | mint
2 | 100 | candybar | snickers
3 | 100 | color | red
我想创建一个 SELECT
语句,使用 fav_key
值作为列标题,将用户的收藏夹变成列。 *问题是我永远不知道 fav_val
值是什么,因为这些是用户输入的,所以列名必须动态生成。
选择...
[ user_id + name + fav_icecream + fav_candybar + fav_color ]
100 | Sally | mint | snickers | red
考虑到对性能的一些遥远的想法——其中一个问题是我不想运行两个 SELECT
语句来获取用户数据和用户收藏夹(另外我喜欢以这种方式动态命名列的想法)。
更新
所以这叫做,旋转,优秀。
如果我永远不知道值是什么怎么办?我需要根据收藏夹查询动态生成列。
最佳答案
像这样:
Select fav.user_id, u.name
MAX(case WHEN fav.fav_key = 'icecream' then fav.fav_val end) as 'fav_icecream',
MAX(case WHEN fav.fav_key = 'candybar' then fav.fav_val end) as 'fav_candybar',
MAX(case WHEN fav.fav_key = 'color' then fav.fav_val end) as 'fav_color'
From favorite fav
inner join users u on fav.user_id = u.user_id
group by fav.user_id
工作示例:DEMO
请注意:该演示是针对 MS SQL Server 的,但它对 mysql 的工作方式相同,我只是想为您提供一个现场演示。
关于mysql - 在 MySQL 中,如何动态选择一个表的值作为另一个表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279518/