我正在处理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将在列和行数上都保持增长,我将不得不使((NxN -当前行数)如果我每次添加'D‘则(4*4)-9= 7新行)表中的行数为'N’。
这就是为什么我在想是否有更好的方法,除了MySQL之外是否有更好的数据库来解决我的问题。这两个答案都将非常感谢。谢谢。
发布于 2020-09-08 06:52:37
在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注意:这将不能很好地扩展(每个子查询都意味着对表的完整扫描)。您最好从一开始就将数据存储在正确的数据结构中。
https://stackoverflow.com/questions/63785095
复制相似问题