mySQL是一个更优雅的查询,匹配一些(不是所有)标准

时间:2014-04-26 16:54:47

标签: mysql

我有一个凌乱的解决方案,但认为必须有一个简单而优雅的方法来编写此查询。

在一张桌子中寻找匹配。该表有6列。(可能更晚)

如果匹配三列,则需要返回行。

例如,列名称颜色,大小,形状,重量,高度,宽度

返回的行可以因为WHERE子句在颜色,高度,宽度上受到影响。 或者是大小,形状,宽度的击中。

基本上任意三列的任意组合。

我可以看到使用(尺寸,宽度,高度)或(颜色,形状,宽度)或(颜色,尺寸,宽度)的解决方案........但这只是一种愚蠢的方式它

必须有一种简单的方法让我望而却步。

1 个答案:

答案 0 :(得分:0)

如果我找对你,你想要这样的东西:

select * from table where 
(col1 = x)
+
(col2 = y)
+
(col3 = z)
+
(col4 = w)
+
(col5 = v)
>= 3

col1 = x这样的布尔表达式会返回truefalse10。因此,这匹配至少3列匹配的任何行,无论5中的哪一行。

然而,在旁注中,在不同列中具有属性是不太好的数据库设计的标志。如果您需要为一个项目添加一个属性,该怎么办?你必须改变整个表格。所有其他项目在该列中将null,浪费空间。如果一个项目在列中有null,它是否真的没有该属性,或者它只是没有设置?

考虑在行而不是列中使用属性并阅读有关规范化的内容。