我正在使用 Rails 3.2.2,我想从数据库中检索记录,其中 至少 10 个列值中的 3 个存在。也就是说,如果我有一个具有 10 个属性(表列)的类(MySQL 数据库表),其值可以是 nil
(null
),那么我想执行一个查询,以便返回对象(记录),其中至少存在这 10 个属性值中的 3 个(不是 null
)。
这可能吗?如果可以,怎么做到的?
UPDATE 如果我有一个类(一个 MySQL 数据库表),它有 10 个属性(表列),其值可以是 nil
(null
) 或 ""(not
null
), 然后我想执行查询以返回对象 (记录),其中至少存在这 10 个属性值中的 3 个(不是 null
和 不是“”)。
最佳答案
您可以与测试每个单独列的总和进行比较 IS NOT NULL
AND
<>
:
WHERE ( (colA IS NOT NULL AND colA <> ' ')
+ (colB IS NOT NULL AND colB <> ' ')
+ ...
+ (colJ IS NOT NULL AND colJ <> ' ')
) >= 3
这是有效的,因为每个测试的 bool 结果都隐式转换为 1
(如果为真)或 0
(如果为假);因此,总和是既不是 NULL
的列数也不' '
.
或者,您可以处理 NULL
案例使用 IFNULL()
:
WHERE (IFNULL(colA<>' ',0) + IFNULL(colB<>' ',0) + ... + IFNULL(colJ<>' ',0)) >= 3
关于mysql - 如何从数据库中检索至少存在 10 个列值中的 3 个的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10649539/