假设我有一个名为conditions的示例表:
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
表以实现我的目标?
答案 0 :(得分:1)
检查是否满足所有条件的简单方法是确定是否存在未满足的任何条件。使用De Morgan's laws反转条件。您可以用简单的方式处理NULL
- 为每个项目添加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
更有效。
答案 1 :(得分:1)
在这里首先你在表中创建主键并使用下面的查询,请你检查第一个数据库连接是否正确
"Select * from tablename where `age_from` <= 11 and `age_to` >= 11";