我有两张table,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
-------------------------------------------------
现在我要实现的是follow,包括单查询、内部连接、交叉连接等。
SELECT * FROM A
CROSS JOIN B WHERE A.id=1
结果一定是
--------------------------------------------------------------------
id | name | looks | lazy | car | email
--------------------------------------------------------------------
1 | sorabh | handsome | yes | honda | some@ccid.com
--------------------------------------------------------------------
5条答案
按热度按时间fcipmucu1#
pcww981p2#
假设
id
列table a
是一个primary key
列和table b
具有的复合唯一键a_id
,key
列组合或没有重复项即使没有此类约束,相关子查询也可以用作:vc6uscn93#
使用时的用例
max()
```select a.name,
max(case when key='looks' then value end) as looks,
max(case when key='lazy' then value end) as yes,
max(case when key='car' then value end) as car,
max(case when key='email' then value end) as email,
tablea a join tableb b on a.id=b.a_id
group by a.name
ovfsdjhp4#
试试这个
如果键和值是动态的,请使用下面的
u4vypkhs5#
您可以尝试使用mysql动态pivot来满足您的期望。
使用条件聚合函数进行透视
准备sql语句并用于执行sql
EXECUTE stmt;
动态地。sqlfiddle公司
结果
参考
动态数据透视表