如何解决为数据库存储2D矩阵数据
我在excel中处理2D数据,并希望将数据存储在MySQL数据库中以供我使用。但是我遇到了一个可能有一个更好的解决方案的问题,但我可能会找不到它。给出了示例示例。
+-----+-----+-----+-----+
| | A | B | C |
|-----|-----|-----|-----|
| A | 1 | 2 | 3 |
|-----|-----|-----|-----|
| B | 4 | 5 | 6 |
|-----|-----|-----|-----|
| C | 7 | 8 | 9 |
+-----+-----+-----+-----+
因此,我需要的是一种基于2个值查询和获取我的值的方法。因此,如果我需要AB的值,则它等于BC = 6和AA = 1。我将这些数据存储在我的excel中,并按如下所示将它们存储在MySQL DB中。
table:
+-------+------+-------+
| v1 | v2 | sol |
|-------|------|-------|
| A | A | 1 |
|-------|------|-------|
| A | B | 2 |
|-------|------|-------|
| A | C | 3 |
+-------+------+-------+
| B | A | 4 |
|-------|------|-------|
| B | B | 5 |
|-------|------|-------|
| B | C | 6 |
+-------+------+-------+
| C | A | 7 |
|-------|------|-------|
| C | B | 8 |
|-------|------|-------|
| C | C | 9 |
+-------+------+-------+
这样,我可以查询SELECT sol FROM table WHERE v1 = 'A' AND v2 = 'C'
,我将获得正确的值AC = 3。
但是我担心的是,这个excel的行数和列数都会持续增长,如果我添加'D',那么我将不得不使((NxN-当前行数),然后(4 * 4)-9 = 7个新行)'N'号每次在表中的行数。
这就是为什么我在考虑是否有更好的方法以及是否有更好的数据库(MySQL除外)来解决我的问题。这两个答案将不胜感激。谢谢。
解决方法
在MySQL中,您可以使用union all
取消透视该数据集。假设原始表的第一列称为id
,您将执行以下操作:
select id v1,'A' v2,a sol from mytable
union all select id,'B',b from mytable
union all select id,'C',c from mytable
注意:这将无法很好地扩展(每个子查询都意味着对该表进行了全面扫描)。从一开始就将数据存储在正确的数据结构中可能会更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。