【发布时间】:2018-11-09 16:52:28
【问题描述】:
我有两张桌子,A 和 B
A(身份证,姓名)
B (a_id, 键, 值)
带有一些值的表格
**A table**
-----------------------------
id | name
-----------------------------
1 | sorabh
2 | john
-----------------------------
**B table**
-------------------------------------------------
a_id | key | value
-------------------------------------------------
1 | looks | handsome
1 | lazy | yes
1 | car | honda
2 | phone | 948373221
1 | email | some@ccid.com
-------------------------------------------------
现在我想要实现的是跟随,单查询、内连接、交叉连接等。
SELECT * FROM A
CROSS JOIN B WHERE A.id=1
结果必须类似于
--------------------------------------------------------------------
id | name | looks | lazy | car | email
--------------------------------------------------------------------
1 | sorabh | handsome | yes | honda | some@ccid.com
--------------------------------------------------------------------
【问题讨论】:
-
你需要使用pivot
-
左连接。结果将是逐行的(列将是 id、name、a_id、key、value)。您的输出称为交叉表、数据透视表。如何做到这一点取决于您使用的后端。例如对于 postgreSQL 检查 tablefunc 扩展(这种类型的数据更适合 NoSQL)。
-
考虑处理应用程序代码中的显示问题
-
问题在于您的表 B 将具有动态值。因此,您提出的查询的结果集必须为每个 Id 的每个不同的“键”行值都有一个列。所以 ID 1 会有一个“电话”列,但是一个空值。随着数据库的增长,空值也会增长。
标签: mysql sql pivot-table