我有一个凌乱的解决方案,但认为必须有一个简单而优雅的方法来编写此查询。
在一张桌子中寻找匹配。该表有6列。(可能更晚)
如果匹配三列,则需要返回行。
例如,列名称颜色,大小,形状,重量,高度,宽度
返回的行可以因为WHERE子句在颜色,高度,宽度上受到影响。 或者是大小,形状,宽度的击中。
基本上任意三列的任意组合。
我可以看到使用(尺寸,宽度,高度)或(颜色,形状,宽度)或(颜色,尺寸,宽度)的解决方案........但这只是一种愚蠢的方式它
必须有一种简单的方法让我望而却步。
答案 0 :(得分:0)
如果我找对你,你想要这样的东西:
select * from table where
(col1 = x)
+
(col2 = y)
+
(col3 = z)
+
(col4 = w)
+
(col5 = v)
>= 3
像col1 = x
这样的布尔表达式会返回true
或false
,1
或0
。因此,这匹配至少3列匹配的任何行,无论5中的哪一行。
然而,在旁注中,在不同列中具有属性是不太好的数据库设计的标志。如果您需要为一个项目添加一个属性,该怎么办?你必须改变整个表格。所有其他项目在该列中将null
,浪费空间。如果一个项目在列中有null
,它是否真的没有该属性,或者它只是没有设置?
考虑在行而不是列中使用属性并阅读有关规范化的内容。