【发布时间】:2020-04-24 16:47:04
【问题描述】:
我需要向您寻求有关 MySQL 选择查询的帮助。
具体示例:有配偶和孩子的员工。
我已经将 2 个表合并为一个,现在我需要:
1、选择按“emp”字段分组的数据
2、用这些规则转换结果:
- 只有一行具有特定的 emp(emp-A、emp-B、emp-C)
- 后续列中的每个亲属(配偶和孩子)(先是配偶,然后是孩子)
表格(实际上是两个连接的表格):
+---------+-----------+-----------+------------+
| emp | relation | relative | birthdate |
+---------+-----------+-----------+------------+
| emp-A | spouse | spouse-A | 1970-xx-xx |
| emp-A | kid | kid-A1 | 1971-xx-xx |
| emp-A | kid | kid-A2 | 1972-xx-xx |
| emp-A | kid | kid-A3 | 1973-xx-xx |
| emp-B | spouse | spouse-B | 1980-xx-xx |
| emp-B | kid | kid-B1 | 1981-xx-xx |
| emp-B | kid | kid-B2 | 1982-xx-xx |
| emp-C | kid | kid-C1 | 1991-xx-xx |
| emp-C | kid | kid-C2 | 1992-xx-xx |
+---------+-----------+-----------+------------+
期望的结果:
+---------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+
| emp | spouse | birthdate | kid1 | birthdate1 | kid2 | birthdate2 | kid3 | birthdate3 |
+---------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+
| emp-A | spouse-A | 1970-xx-xx | kid-A1 | 1971-xx-xx | kid-A2 | 1972-xx-xx | kid-A3 | 1973-xx-xx |
| emp-B | spouse-B | 1980-xx-xx | kid-B1 | 1981-xx-xx | kid-B2 | 1982-xx-xx | | |
| emp-C | | | kid-C1 | 1991-xx-xx | kid-C2 | 1992-xx-xx | | |
+---------+-----------+-------------+-----------+-------------+-----------+-------------+-----------+-------------+
经过几个小时不成功的搜索,我放弃了。
我将非常感谢一些线索是否有可能实现这样的目标(一个选择查询对我来说是最好的选择)。
提前谢谢您。
回复 emsoff,来源表:
员工:
+----+---------+
| id | emp |
+----|---------+
| 1 | emp-A |
| 2 | emp-B |
| 3 | emp-C |
+----|---------+
亲戚:
+----+---------+-----------+-----------+------------+
| id | emp_id | relation | relative | birthdate |
+----+---------+-----------+-----------+------------+
| 1 | 1 | spouse | spouse-A | 1970-xx-xx |
| 2 | 1 | kid | kid-A1 | 1971-xx-xx |
| 3 | 1 | kid | kid-A2 | 1972-xx-xx |
| 4 | 1 | kid | kid-A3 | 1973-xx-xx |
| 5 | 2 | spouse | spouse-B | 1980-xx-xx |
| 6 | 2 | kid | kid-B1 | 1981-xx-xx |
| 7 | 2 | kid | kid-B2 | 1982-xx-xx |
| 8 | 3 | kid | kid-C1 | 1991-xx-xx |
| 9 | 3 | kid | kid-C2 | 1992-xx-xx |
+----|---------+-----------+-----------+------------+
与 employees.id=relatives.emp_id 联接的表
【问题讨论】:
-
如果没有已经加入的表,这实际上可能更容易做到。您可以单独发布连接的表格吗?
-
我已经添加了源表
-
你正在寻找pivot你的输出。在 MySQL 中,旋转是 xxxx 脖子上的一个臭名昭著的痛苦。
-
考虑处理应用代码中数据显示的问题
标签: mysql select group-by pivot transform