在这里完成sql noob。
尝试考虑一种将一些数据存储在看起来有点像这样的表中的方法:
"0-15", "low", "1-3"
"45-50", "med", "*"
"*", "*", "1000"
其中第 1 列和第 3 列是整数范围,第 2 列是枚举类型(可以实际存储为任何类型)。
我希望能够在表中放入通配符以减少行数,同时仍然不会“丢失”任何内容。
据我了解,第 1 列和第 3 列最好分别存储为两列整数,并使用 -INT_MAX 到 INT_MAX 或其他作为“通配符”。 (从 bla 中选择 bla,其中 col1.1 > val 且 col1.2 < val)
这是一个合理的策略吗?
第 2 列似乎更棘手,从 bla 中选择 bla,其中 col2 = 'med' 或 col2 ='*' 似乎不正确。我可能可以像 1 和 3 一样以数字方式执行这些操作,但我宁愿不这样做
有人愿意启发我吗?
最佳答案
我的偏好是使用 NULL
作为通配符,因为它对于任何研究数据库的人来说都会很突出。在这种情况下,WHERE
子句的每个元素将如下所示:
WHERE (77777 > min_value OR min_value IS NULL)
AND (77777 < max_value OR max_value IS NULL)
AND (col2 = 'med' OR col2 IS NULL)
这与您之前的 *
基本思想相同,但使用 SQL 识别为与普通值不同的值。
关于sql "ranges"和通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316701/