检查是不是满足所有条件的查询

Posted

技术标签:

【中文标题】检查是不是满足所有条件的查询【英文标题】:Query that checks if all conditions are met检查是否满足所有条件的查询 【发布时间】:2014-12-20 09:59:54 【问题描述】:

假设我有一个名为条件的示例表:

CREATE TABLE conditions (
  id int NOT NULL,
  age_from int,
  age_to int,
  height_from int,
  height_to int,
  PRIMARY KEY (id)
);

我插入了几个条件:

INSERT INTO conditions (age_from, age_to, height_from, height_to) 
VALUES (10, 14, NULL, 200);
INSERT INTO conditions (age_from, age_to, height_from, height_to) 
VALUES (NULL, NULL, 170, 250);

鉴于这些条件 年龄:11 岁且身高:180 的人符合标准,但年龄:15 岁且身高:169 的人不符合标准。

所以我的第一个想法是计算所有满足的条件并与条件的总数进行比较。 其中一些条件可以是NULL,这一事实使查询有点复杂。

这样的事情是行不通的,因为我必须检查具体条件是否为NOT NULL,然后进行比较,这会使查询变得相当复杂。

WHERE age_from <= 11 AND age_to >= 11 -- or using BETWEEN

是否有更优雅的方式来编写查询或重组conditions 表以实现我的目标?

【问题讨论】:

哪个是关键字段?如果您正在寻找一种编写查询的优雅方式 - 首先在您的表中添加一个主键字段。 你比较条件是什么? 【参考方案1】:

检查是否满足所有条件的一种简单方法是找出是否有任何条件满足。使用De Morgan's laws 反转条件。您可以直接处理NULLs - 在每个项目中添加IS NULL,如下所示:

select count(*)
from conditions
where (age_from IS NOT NULL AND age < age_from)
  OR  (age_to IS NOT NULL AND age > age_to)
  OR  (height_from IS NOT NULL AND height < height_from)
  OR  (height_to IS NOT NULL AND height > height_to)

如果上述查询返回零,则所有条件都已满足。否则,查询返回未满足的条件数。

注意:如果您打算在WHERE 子句中使用此查询,使用NOT EXISTS 运算符将比使用COUNT 更有效。

【讨论】:

【参考方案2】:

首先在这里您在表中创建主键并使用下面的查询,例如请检查第一个数据库连接是否正确

"Select * from tablename where `age_from` <= 11 and `age_to` >= 11";

【讨论】:

以上是关于检查是不是满足所有条件的查询的主要内容,如果未能解决你的问题,请参考以下文章

检查项目的尺寸是不是大于给定值

NSPredicate 用于检查与其他变量匹配的 CoreData 属性是不是满足条件

MYSQL检查所有行并满足条件

MySQL存储过程——一一检查是不是满足某些条件;如果不满足,则退出程序并返回特定消息

C中的程序,它读取声音数据并检查给定数据是不是满足wav文件的先决条件

要检查 Pandas Dataframe 列的 TRUE/FALSE,如果 TRUE 检查另一列是不是满足条件并生成具有值 PASS/FAIL 的新列