SQL :左连接分组连接行

SQL : Left join with grouped joined rows

我有两个 table:

用户

id name email
1 John j@d.com
2 Jane a@d.com

元数据

user_id name value
1 created_at "2021-01-01"
1 logged_at "2021-01-01"
2 created_at "2021-01-01"

问题

我想构建一个 SQL 查询结果如下所示,这样我就可以在用户元数据上找到一些位置和顺序。

id name email created_at logged_at
1 John j@d.com 2021-01-01 2021-01-01
2 Jane a@d.com 2021-01-01 NULL

进度

我设法建立了一个结果,但只有一个元(created_at)而不是 logged_at,因为我无法为同一用户分组许多元行。

SELECT users.*, CAST(JSON_UNQUOTE(value) AS DATE) as created_at
FROM users
LEFT JOIN metas on users.id = metas.user_id and metas.name = 'created_at'
ORDER BY created_at desc

约束条件

有什么建议吗?

您可以加​​入同一个 table 两次。

SELECT users.*, 
  CAST(JSON_UNQUOTE(m1.value) AS DATE) as created_at,
  CAST(JSON_UNQUOTE(m2.value) AS DATE) as logged_at
FROM users
LEFT JOIN metas m1 on users.id = m1.user_id and m1.name = 'created_at'
LEFT JOIN metas m2 on users.id = m2.user_id and m2.name = 'logged_at'
ORDER BY created_at desc

使用枢轴

select *
from
(
    select u.id,u.name as user_name,u.email,m.name as meta_name,m.value
    from @tUsers as u
    left join @tMetas as m on u.id=m.user_id
) as q
pivot 
( 
    max(q.value) for q.meta_name in ([Created_At],[Logged_At])
) as pvt
order by pvt.id