我正在尝试编写一个SQL查询,该查询将在列中的CSV(或类似)数组中进行搜索。这是一个例子:
插入属性集 卧室= 1,2,3(或1-3) title =不错的财产 价格= 500
然后我想搜索卧室= 2+的地方。这甚至可能吗?
答案 0 :(得分:4)
在SQL中处理此问题的正确方法是为多值属性添加另一个表。在单个列中存储多个离散值与关系模型相反。由于它是打算禁止的,因此在SQL语言中几乎不支持它。
在逗号分隔列表中查找给定值的唯一解决方法是使用正则表达式,这些表达式通常很难且很慢。您必须处理边缘情况,例如值可能在字符串的开头或结尾处,也可能不在字符串的旁边,以及逗号旁边。
SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';
当您使用规范化表时,还有其他类型的查询很容易,但使用逗号分隔列表很难。您提供的搜索等于或大于搜索条件的值的示例就是这种情况。还要考虑:
如果您不想创建第二个表,那么想出一种用单个值表示数据的方法。
更确切地说,我应该说我建议您使用单个值每列来表示您的数据,而Mike Atlas的解决方案可以实现这一点。
答案 1 :(得分:2)
通常,这不是您应该如何在关系数据库中存储数据。
也许您应该有一个MinBedroom
和MaxBedroom
列。例如:
SELECT * FROM properties WHERE MinBedroom > 1 AND MaxBedroom < 3;