gpt4 book ai didi

sql - 我应该如何设计我的 table

转载 作者:行者123 更新时间:2023-12-01 05:15:25 26 4
gpt4 key购买 nike

我需要创建一个用于操作数据的表,该表已提供给我,如下所示:

col1    col2        col3
1 < 3 50%
2 < 5 50%
3 < 10 50%
1 5>RC >=3 25%
2 10>RC >=5 25%
3 20>RC >=10 25%
1 >=5 0%
2 >=10 0%
3 >=20 0%

系统的用户将传递一个数字,该数字存在于 col2 中。和 col1以上。假设用户为 col2 传递了 7,为 col1 传递了 1。业务要求是我应该向用户返回以下行
1       >=5         0%

粗略地说,就是我检查了 col2中的值,并注意到它是 >=5 ,我的输入数据适合。

我在想 split col2跨越两列 - 一列用于存储数字,另一列用于运算符。像这样的东西:
col1    col2        col3    col4
1 3 50% <
2 5 50% <
3 10 50% <
1 5>RC >=3 25%
2 10>RC >=5 25%
3 20>RC >=10 25%
1 5 0% >=
2 10 0% >=
3 20 0% >=

通过这种方式,我将能够根据前三列中的数据编写用于寻址查询的查询(尽管我现在还没有运行查询,我只是进行了试运行)。到目前为止我无法弄清楚的是 - 如何处理第 4、5、6 行中的数据?您可以忽略 RC加入这些行,因为我当然可以取消它,因为我关心查询的数字范围。

我尝试将第 4、5、6 行的数据分成 2 行,例如:
1       3           25%     >=
1 5 25% <
2 5 25% >=
2 10 25% <
3 10 25% >=
3 20 25% <

但是,在检索数据时,我在这里看到了一个迫在眉睫的问题。假设用户 paased col2 = 7 AND col1 = 1 .现在,我应该只有一行,即我问题中第一个表中的第 7 行,但我还得到了一个额外的行(最后一个表中的第一行,我在其中拆分了 BETWEEN 条件的数据)

任何人都可以建议我存储这些数据的更好方法,以便可以实现我的要求吗?

SQLFiddle 演示: http://www.sqlfiddle.com/#!4/d2d90/7

最佳答案

我建议,您应该将 col2 分成两列 - 下限和上限,例如用 NULL 替换不存在的边界。它看起来像这样:

+----+-------+-------+----+
|col1|col2_lb|col2_hb|col3|
+----+-------+-------+----+
|1 |NULL |3 |50% |
+----+-------+-------+----+
|2 |NULL |5 |50% |
+----+-------+-------+----+
|3 |NULL |10 |50% |
+----+-------+-------+----+
|1 |3 |5 |25% |
+----+-------+-------+----+
|... |... |... |... |
+----+-------+-------+----+
|1 |5 |NULL |0% |
+----+-------+-------+----+

使用此结构,您将能够通过简单的查询找到所需的行:
SELECT * 
FROM T_TABLE t
WHERE t.col1 = :VAL1
AND NVL(t.col2_lb,:VAL2) <= :VAL2
AND NVL(t.col2_hb,:VAL2+1) > :VAL2

关于sql - 我应该如何设计我的 table ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21133991/

26 4 0