我有一个困惑的解决方案,但认为必须有一个简单且更优雅的方法来编写此查询。
在一张表中查找匹配项。该表有 6 列。(稍后可能会更多)
如果匹配超过三列,则需要返回行。
例如列名称颜色、尺寸、形状、重量、高度、宽度
可以返回行,因为 WHERE 子句会命中颜色、高度、宽度。 或者是尺寸、形状、宽度的热门。
基本上是任意三列的任意组合。
我可以使用(尺寸,宽度,高度)或(颜色,形状,宽度)或(颜色,尺寸,宽度)看到解决方案......但这只是一种愚蠢的方式它。
一定有一个简单的方法让我无法理解。
最佳答案
如果我没猜错的话,你想要这样的东西:
select * from table where
(col1 = x)
+
(col2 = y)
+
(col3 = z)
+
(col4 = w)
+
(col5 = v)
>= 3
像 col1 = x
这样的 bool 表达式返回 true
或 false
、1
或 0
。因此,这会匹配至少 3 列匹配的任何行,无论 5 列中的哪一列。
但是,顺便说一句,在不同的列中拥有属性是数据库设计不太好的标志。如果您需要为一件商品添加一项属性该怎么办?您必须更改整个表。所有其他项目在该列中都会有 null
,浪费空间。如果某项在列中具有 null
,那么它是否真的没有该属性,或者只是未设置?
考虑将属性放在行而不是列中,并阅读有关规范化的内容。
关于mySQL 一个更优雅的查询,匹配一些(不是全部)条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313947/