我有兩個表:
users包含我所有具有共同屬性的用戶metas以一對多關系保存所有動態屬性,(僅供參考,我無法將這些屬性合并到users表中,因為它們可以動態創建/洗掉)。
用戶
| ID | 姓名 | 電子郵件 |
|---|---|---|
| 1 | 約翰 | [email protected] |
| 2 | 簡 | [email protected] |
元
| 用戶身份 | 姓名 | 價值 |
|---|---|---|
| 1 | created_at | “2021-01-01” |
| 1 | 登錄_at | “2021-01-01” |
| 2 | created_at | “2021-01-01” |
問題
我想構建一個 SQL 查詢,結果如下所示,所以我可以在用戶元資料上有一些位置和順序。
| ID | 姓名 | 電子郵件 | created_at | 登錄_at |
|---|---|---|---|---|
| 1 | 約翰 | [email protected] | 2021-01-01 | 2021-01-01 |
| 2 | 簡 | [email protected] | 2021-01-01 | 空值 |
進步
我設法構建了一個結果,但只有一個元 (the 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
約束
- 它應該在單個查詢中完成,不能從代碼端完成。
有什么建議 ?
uj5u.com熱心網友回復:
您可以兩次加入同一個表。
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
uj5u.com熱心網友回復:
使用樞軸
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358084.html
上一篇:Option(OptimizeForUnknown)和option(Optimizefor(@parameterUnknown))的區別
