sql "ranges"和通配符

标签 sql

在这里完成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/

相关文章:

Linux 上的 PHP 随机无法连接到 Microsoft SQL Server 2005

mysql 2 多个 WHERE 子句的连接错误

c# - 有没有一种方法可以使用 ADO.NET 来确定一个表是否存在于与任何数据提供程序一起使用的数据库中?

python - MySQL 和 Python : How to map the table data?

php - MySQL结合了几个select语句

mysql - 如果表 1 有 2 行与表 2 匹配,则 INNER JOIN

sql - 选择 "at least 2"XPath 表达式

mysql - 删除重复的行,但保留一个没有唯一列的行

c# - 在 div 中显示 SQL 查询返回的所有行

MySQL:不使用触发器同步数据库