mysql - 如何从数据库中检索至少存在 10 个列值中的 3 个的记录?

标签 mysql sql ruby-on-rails ruby ruby-on-rails-3

我正在使用 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/

相关文章:

javascript - 在 Node JS 中连接 mysql 和进程变量

java - 为 MySQL 进行批处理时,JDBC 似乎不想调用 DELETEPreparedStatement

java - SQL 仅插入特定列

ruby-on-rails - 本地运行 React/Rails 应用程序

html - 检查按下了哪个提交按钮

sql - 获得两种不同条件下的计数

sql - 在 TimescaleDB 的gapfill 的WHERE 子句中使用子查询

ruby-on-rails - 如何判断rails是否已经投入生产?

ruby-on-rails - Rails 表单在提交时将 false 作为 boolean 值的默认值传递

php - Zend Framework 2 Doctrine 2 BJ Younglbood Profiler 报告未定义索引数据库