0

我正在处理 excel 中的 2D 数据,并希望将数据存储在 MySQL 数据库中以满足我的需要。但是我遇到了一个问题,该问题可能有更好的解决方案,但我可能会错过。给出了一个示例。

+-----+-----+-----+-----+
|     |  A  |  B  |  C  |
|-----|-----|-----|-----|
|  A  |  1  |  2  |  3  |
|-----|-----|-----|-----|
|  B  |  4  |  5  |  6  |
|-----|-----|-----|-----|
|  C  |  7  |  8  |  9  |
+-----+-----+-----+-----+

所以,我需要的是一种基于 2 个值查询和获取我的值的方法。因此,如果我需要 AB 的值,它的 2 与 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 - current rowcount)然后(4 * 4)-9 = 7个新行)每次表中的'N'行数。

这就是为什么我在考虑是否有更好的方法,以及是否有更好的数据库来解决我的问题。两个答案将不胜感激。谢谢。

4

1 回答 1

0

在 MySQL 中,您可以使用union allunpivot 这个数据集。假设原始表的第一列被称为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

注意:这不会很好地扩展(每个子查询都意味着对表进行完整扫描)。从一开始就将数据存储在正确的数据结构中可能会更好。

于 2020-09-07T22:52:37.157 回答